请问使用TCP的send和recv时,速度不匹配该怎么解决?

ww884203 2012-05-08 07:10:15
新人刚刚接触网络,写了一个极其简单的socket程序,就是TCP的一个服务端和客户端。当服务端和客户端都遵循写一条---读一条---写一条---读一条的时候没有问题,而当服务端只负责读,而客户端只负责写的时候,很容易产生服务端一次性读出n条写入的数据的情况。我试了一下,在客户端每写入一条数据后加入Sleep(500)可以解决这个问题,不过如果不人为的产生延迟的话,有什么办法解决这样的问题呢?难道把'\0'也一起传递然后在服务器端分割吗?
其实这个问题有点类似赵先生刚刚跟我说的一个陷阱:
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
求指点!
...全文
182 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SONG_CA 2012-05-08
  • 打赏
  • 举报
回复
传输字节流,双方要约定帧结构。帧结构中包括同步头,数量长度,数据类型,这样接收端才会知道什么时候是一个新帧,什么时候收完了一个完整的帧,可以多这个完整的帧进行解帧处理了
ww884203 2012-05-08
  • 打赏
  • 举报
回复
也就是类似我说的,每个消息后面都加\0,然后发送到了缓冲区里面服务器再来拆分么?
qq120848369 2012-05-08
  • 打赏
  • 举报
回复
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)

TCP可靠字节流, 1次read+N次拆包。
lkxd2011 2012-05-08
  • 打赏
  • 举报
回复
这个你可以发个结构体,加上数据头和数据尾~~作为判断一次发送的数据~~

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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