【发布时间】:2014-08-14 06:21:58
【问题描述】:
我有两个类 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";
我的问题是:
为什么我的输出中出现垃圾值以及如何解决它?
请帮助我理解这一点。我做这个活动是为了理解序列化和反序列化。
【问题讨论】:
-
通常不建议通过 TCP 流发送原始结构,除非您真的知道自己在做什么,在字节顺序、打包/填充等方面。另外,请记住 TCP 是一个 stream - 你可能会收到 1 个字节或更多。
-
最初我只是简单地传递整数值,即 emp_id 并且我创建了对象作为员工对象;不使用指针并访问 emp_id 作为 object.emp_id=10;接收者确实接收了它,我在输出中也得到了相同的值。但是当我通过创建指针创建对象时,我得到了垃圾值。所以,为什么会发生这种情况。
标签: c++ sockets serialization client-server deserialization