Windows下socket发了一次数据, 有可能多次才收到吗?

xfchina 2000-08-17 12:35:00
一般情况下,我是一次都收到了,我想知道否有必要做一定的处理
...全文
197 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chen_Lin 2000-08-17
  • 打赏
  • 举报
回复
发包的长度超过缓冲区的时候(默认8K)
xfchina 2000-08-17
  • 打赏
  • 举报
回复
假如我的包不超过8k,会多次收到吗?我的程序在包不超过1k的情况下,在internt上反复测试也没有收到多次的情况,顶多收到两个一样的数据包,我会忽略第二个包。
Kevin_qing 2000-08-17
  • 打赏
  • 举报
回复
當然可能多次才收到了,不信在inet上测测。
kingwill 2000-08-17
  • 打赏
  • 举报
回复
那要看你使用何种类了,CAsyncSocket是非阻塞的异步方式。如果你发包的长度超过缓冲区的时候,会返回SOCKET——ERROR,此时你要判断错误值,GETLASTERROR(),若错误为WSAEWOULDBLOCK,则说明对方缓冲区已满,你需要控制重发。
要是你用CSOCKET类,它是阻塞的,当对方缓冲区满时,它会自己阻塞自己,直到对方完全收到。这种情况,你也要控制避免SOCKET阻塞线程,最好用TIMEOUT,再重发。
一般的情况都是用非阻塞,多线程,来实现同步。

4,354

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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