Socket通信发送和解析出现错误

LillteLillteHui 2010-11-25 07:51:18
客户端发送关键代码:
struct Protocal_1 protocal_1;
Word type=163;
int send_length=sizeof(type)+4+sizeof(protocal_1);//=4026
char *pcreate=(char *)malloc(send_length);
memset((char *)pcreate,0,send_length);
memcpy((char *)pcreate,(Word *)&type,sizeof(type));//前两个字节放type=163
memcpy((char *)(pcreate+sizeof(type)),(char *)&send_length,sizeof(send_length));//中间四个字节放发送长度4026
memcpy((char *)(pcreate+sizeof(type)+sizeof(send_length)),(char *)&protocal_1);//后面放结构体
Sendbuf(pcreate,4026);//省写,发送

服务端解析: Word type;
int s_length=4026;
char *buff=(char *)malloc(s_length);
memset(buff,0,s_length);
ReceiveBuf(buff,s_length);//接收

memcpy((char *)&type,buff,sizeof(type));

ShowMessage(type);
free(buff);

错误,为什么服务端输出的type值是65072
希望高手能指出错误,并给出不足,立马会结贴,谢谢了!



...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LillteLillteHui 2010-11-26
  • 打赏
  • 举报
回复
多谢妖哥,我再找找原因,你看看我的内存分配和然后再读内存有没有什么错误,我第一次写这个协议,希望给予指导!
LillteLillteHui 2010-11-26
  • 打赏
  • 举报
回复
自己写代码有点糊涂,对象传错了!谢谢了
ccrun.com 2010-11-25
  • 打赏
  • 举报
回复
我的意思是说,如果网络传输不正常,可能会出现丢包或粘包的现象,这样会扰乱你的通讯包。所以,对于你的这个结构,建议最后再加一个校验和。确保每次接收到的包都是一个合(和谐)法的包
LillteLillteHui 2010-11-25
  • 打赏
  • 举报
回复
谢谢楼上的回复

我的是4026一个包,是一次性发的,你说的第一次接收4000个是怎么回事?
ccrun.com 2010-11-25
  • 打赏
  • 举报
回复
除了代码中几处明显的手误以外,逻辑上基本没有大什么问题。

关键是一些细节,比如由于网络原因,接收方收到的数据包没有接收完整,也就是说你定的是4026字节一个包,可是第一次接收只收了4000个,那么剩下的26个字节再收的时候,还是会触发接收事件,但是读出前两个字节时,未必等于你期望的163。

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧