c 套接字服务器端发送消息,在C中通过套接字发送struct

本文探讨了客户端使用C结构体向服务器发送消息时遇到的问题,结构体在序列化后大小减小,导致服务器无法正确解析。作者寻求帮助理解为何数据未完整复制和如何修复这一问题,涉及内存分配、数据复制和网络通信细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在开发一个客户端/服务器程序,我的客户端必须向服务器发送消息.

示例消息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数组重构结构.

请让我知道我做错了什么.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值