发送包体长度小问题

PC_9527 2010-01-29 04:55:14
MFC CAsyncSocket异步非阻塞 定时向客户端发送字节数组,步骤是先发送包体长度,然后再发送字节数组。在发送完成后重新发送包体长度,接收端在接受完成后重新接受包体长度,但是第二次接受的长度数据不对。用另外一个连接来发送长度,则没有问题。是什么原因?

...全文
105 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Conry 2010-01-30
  • 打赏
  • 举报
回复
char buff[1024];
int len =100;
char data[100];

memcpy(buff,&len,sizeof(int));
memcpy(buff+sizeof(int),data,len );

send(buff,len+sizeof(int));
PC_9527 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 conry 的回复:]
char buff[1024];
int len =100;
char data[100];

memcpy(buff,&len,sizeof(int));
memcpy(buff+sizeof(int),data,len );

send(buff,len+sizeof(int));
[/Quote]

还是不行,接受后拆出来后,又是第一次的长度正确,第二次就不对了。
PC_9527 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 conry 的回复:]
引用 6 楼 pc_9527 的回复:
引用 5 楼 conry 的回复:
char buff[1024];
int len =100;
char data[100];

memcpy(buff,&len,sizeof(int));
memcpy(buff+sizeof(int),data,len );

send(buff,len+sizeof(int));


还是不行,接受后拆出来后,又是第一次的长度正确,第二次就不对了。


应该是tcp的粘包问题,你接收的处理有问题

我也明白是“沾包”,但是因为发送的数据比较大,tcp无法一次发送完成,可能就是缓冲区的内容影响了。一时也想不出什么好的办法


[/Quote]
Conry 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pc_9527 的回复:]
引用 5 楼 conry 的回复:
char buff[1024];
int len =100;
char data[100];

memcpy(buff,&len,sizeof(int));
memcpy(buff+sizeof(int),data,len );

send(buff,len+sizeof(int));


还是不行,接受后拆出来后,又是第一次的长度正确,第二次就不对了。
[/Quote]

应该是tcp的粘包问题,你接收的处理有问题

PC_9527 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 inzaghi97 的回复:]
为啥要分两次发,一次发过去,消息中带有长度和字节数组
[/Quote]

用结构体?
xuxian02092213 2010-01-29
  • 打赏
  • 举报
回复
看你的缓冲有没有清了
我要戒烟了 2010-01-29
  • 打赏
  • 举报
回复
为啥要分两次发,一次发过去,消息中带有长度和字节数组

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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