我有两个类client.cpp和一个server.cpp使用tcp套接字,消息从客户端发送到服务器。 在客户端,我有一个具有不同值的班级员工,如下所示:
class employee{
int emp_id;
char emp_name;
float emp_weight;
};
我已将员工的目标定为:
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";
我的问题是:
为什么我的输出中会出现垃圾值以及如何解决它?
请帮助我理解这一点。我正在做这个活动,因为我对序列化和反序列化有所了解。
答案 0 :(得分:0)
您的员工类只有一个字符用于emp_name成员。你不能像#34; MESSAGE&#34;变成一个角色。尝试这样做会将多余的字符复制到emp_weight的内存中,从而产生垃圾。您可以通过声明
来解决此问题char emp_name[128];
在接收大小上,必须检查recv的返回值。您可能获得的字节数少于预期,当发生这种情况时,您必须再次调用recv以获得更多字节。