关于连续send和recv的问题?

ynbme 2003-09-10 11:47:04
我在服务器端连续向客户端发两个send,用来传送数据,如果数据很长,我在两个不同的数据段中加入了不同的数据头。在客户端循环接收,那在客户端recv时,会不会把第一次
send中的尾部数据和第二个send中的数据头混在一起,在一个recv循环中接收呢,就是说,一次recv,收两个数据包了,如果会怎么处理呢??
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ypos 2003-09-10
  • 打赏
  • 举报
回复
你要在数据头里添加长度
Bind 2003-09-10
  • 打赏
  • 举报
回复
如果两个send是在同一个线程,而且是严格按照发完一个数据包再发下一个的话, recv也是按照这个顺序的。同时不排除一次recv把两个send的内容全收下来的可能
shiquan 2003-09-10
  • 打赏
  • 举报
回复
recv()的返回值是接受的大小。如果是tcp不会出现交错接受的现象,如果是udp 就说不起了。还有,我一直认为recv()返回0说明接受完毕,如果说你连续发了两个包,我不知道会不会出现两次0返回值。不过你可以试验一下。如果不行,你就使用头上加长度的方法吧。
flagfly 2003-09-10
  • 打赏
  • 举报
回复
你说的做不到。只能是收完后,自己从头根据包的长度解析。
至于一次收一个包还是两个包,你自己决定不了。
除非你的所有包有固定大小,而你也在recv中指定接收该长度
的数据。
ynbme 2003-09-10
  • 打赏
  • 举报
回复
先谢谢了!
如果添加长度,那recv也会在一次接收中得到两个数据包的不同部分,怎么严格的收完一个包,处理后,在收另一个呀?
l1ul1u 2003-09-10
  • 打赏
  • 举报
回复
send()和recv()函数的第三个参数是长度
有时候连续发send()二个10字节,而你接收recv是20个字节,就会只接收一次
最好send()和recv()函数的长度能够相等

18,356

社区成员

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

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