使用序列化将类的对象从客户机发送到服务器
Sending object of a class from client to server using serialization
我有两个类一个client.cpp和一个server.cpp使用tcp套接字和消息从客户端发送到服务器。在客户端,我有一个类员工有不同的值如下:
class employee{
int emp_id;
char emp_name;
float emp_weight;
};
我把employee的对象设置为:
employee *ptr=new employee();
ptr->emp_id=10;
ptr->emp_weight=50.2;
memcpy(ptr->emp_name,"MESSAGE",7);
现在从客户端传递此数据为:
send(socket_connection,(char*)&ptr,sizeof(ptr),NULL);
在服务器端,我接收到:
char *server_buffer=new char[256];
recv(socket_connection,server_buffer,sizeof(employee),NULL);
employee *pointer=(employee*) server_buffer;
char b[256];
memcpy(b,pointer->emp_name,sizeof(pointer->emp_name));
cout << "Got data as "<< pointer->emp_name << "n";
cout << "Got data as "<< ptr->emp_id << "n";
cout << "Got data as "<< ptr->emp_weight << "n";
我的问题是:
为什么我在我的输出中得到垃圾值以及如何解决它?
请帮助我理解这一点。我做这个活动是为了了解序列化和反序列化
雇员类的emp_name成员只有一个字符。您不能将像"MESSAGE"这样的字符串放入一个字符中。尝试这样做会将多余的字符复制到emp_weight的内存中,从而产生垃圾。您可以通过声明
来解决这个问题。char emp_name[128];
在接收大小上,您必须检查recv的返回值。您可能会得到比预期更少的字节,当这种情况发生时,您必须再次调用recv来获得更多的字节。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- Java 客户端C++服务器数据发送/接收问题
- ZMQ - 客户端服务器:客户端意外关闭,服务器如何检测到?
- 用于本地网络运行的客户端服务器体系结构
- TCP套接字(客户端-服务器)recv()返回-1值
- C++启动另一个程序(客户端-服务器)的程序
- C++客户端/服务器聊天应用程序 - 从 Ubuntu 命令窗口扫描输入
- 如何将数据从 Java 客户机发送到C++服务器
- omniORB C++服务器,Java 客户机在运行应用程序时出现问题
- 简单的客户机/服务器TCP c++
- 具有单消息和广播的c++客户机/服务器应用程序
- Windows上的TLS客户机和服务器[openssl vs. sspi vs. cryptlib]
- 于服务器-客户机通知
- 异步服务器在没有明显原因的情况下停止从客户机获取数据
- 使用Swift和c++的客户机-服务器应用程序
- 通过套接字将对象(XML输出或任何c++对象类型)从服务器传递到客户机,反之亦然
- 使用序列化将类的对象从客户机发送到服务器
- Boost库客户机-服务器应用程序
- 客户机和服务器之间的通信不稳定
- 如何从服务器中的客户机池中识别客户机-设计