使用序列化将类的对象从客户机发送到服务器

Sending object of a class from client to server using serialization

本文关键字:客户机 服务器 对象 序列化      更新时间:2023-10-16

我有两个类一个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来获得更多的字节。