[求助]用CSocket类连续发送数据是否要有时间间隔?

riye 2006-05-07 05:12:59
我通过验证,按照以下两种方法,用CSocket类的面向连接方式发送数据会得到两种结果:

1) 用方法1连续不间断发送数据后,在接收时,则不能完整地收到5个数据;
2) 用方法2有时间间隔的发送数据,在接收时,则能完整地收到5个数据;

请问,这是为什么?要连续发送非得延迟时间吗?

谢谢!


方法1
==============================
{
CSocket sock;

......

for(int i=0; i<5; i++)
{
sock.send(...);
}
}

方法2
==============================
{
CSocket sock;

......

for(int i=0; i<5; i++)
{
sock.send(...);
::Sleep(1); // 时间延迟
}
}
...全文
421 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
菲斯可儿 2006-05-09
  • 打赏
  • 举报
回复
可能出现了粘包。
peakarwen 2006-05-09
  • 打赏
  • 举报
回复
不用延时,你调用send只是把数据复制到系统缓冲区并没有实际发出去,TCP的数据报是没有边界的,可能会被自动组合。所以在接收的时候并不是发送端发几次接受端就得接受几次(UDP必须这样),要注意解包还原。
dasiu 2006-05-08
  • 打赏
  • 举报
回复
不需要延时,之所以出现结不到正确结果的情况,可能和你接收处理的机制有关系
例如:1)你的接收/发送通过协议实现的吗?有协议头/控制吗/数据长度/结束符吗?

否则,不延时会造成多个发送帧,而接收一次性全部接收到的情况出现。就像有些人宣称的"粘包"问题
stevecrisewu 2006-05-08
  • 打赏
  • 举报
回复
不用

你send以后你需要判断其返回值,来看看是否真的发送出去你期望的字节数

18,357

社区成员

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

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