在C中通过套接字发送struct

前端之家收集整理的这篇文章主要介绍了在C中通过套接字发送struct前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个客户端/服务器程序,我的客户端必须向服务器发送消息.

示例消息C结构:

struct Registration
{
char multicastGroup[24];
pid_t clientPid;
};

用于序列化struct的客户端代码

struct Registration regn ;
regn.clientPid = getpid();
strcpy(regn.multicastGroup,"226.1.1.1");

printf("PID:%d\n",regn.clientPid);        
printf("MG:%s\n",regn.multicastGroup);
printf("Size:%d\n",sizeof(regn));           //Size is 28

data = (unsigned char*)malloc(sizeof(regn));
memcpy(data,&regn,sizeof(regn));
printf("Size:%d\n",sizeof(data));           //Size is 4.

用于反序列化数据的服务器代码

if(recvfrom(sd,recvBuf,recvBufSize,(struct sockaddr*)&clientAddr,&len) < 0)
{
       printf("Error receiving message from client\n");
}
else
{
       printf("Message received:%s\n",recvBuf);
       printf("Size :%d\n",strlen(recvBuf));
       memcpy(&regn,sizeof(regn));
       printf("PID:%d\n",regn.clientPid);
       printf("MG:%s\n",regn.multicastGroup);
}

将结构复制到unsigned char *后,数组的大小仅为4.
为什么数据没有完全复制到数组?

服务器无法从char数组重构结构.
请让我知道我做错了什么.

解决方法

sizeof(regn)给出完整结构的大小注册,wheof sizeof(数据)是机器上指针大小为4个字节(数据应该是注册类型的指针).

表达式:

memcpy(data,sizeof(regn));
        ^     ^
        |     value variable of struct type 
        is pointer

也请注意printf,.用于访问元素,例如regn.multicastGroup.

原文链接:https://www.f2er.com/c/119296.html

猜你在找的C&C++相关文章