windows-IOCP同时发多个WSARecv 接受的数据会不会乱?懂的来
时间:2011-12-22
来源:互联网
比如客户端要发送的数据是:"1234567890abcdefghij**********"
[客户端]
分成三个组包通过TCP发给iocp服务器,包发送顺序是:"包头1+123456789" "包头2+abcdefghij" "包头3+**********"
[IOCP服务器]
我每个WSARecv的缓存接受长度是:包头加10个长 ,
要接受这组数据必须同时发送三个WSARecv并创建三个缓存顺序:缓存1,缓存2,缓存3
问题一: (情况1)缓存1因其它原因数据未接受完,只收到"包头1+123" 还有"4567890"没收到,需要继续接受.
这个时候,缓存2会不会把剩下"4567890"接受完并且还能接受一部分包头2的的数据?
问题二:(情况2)缓存1接受的是包头3的数据,缓存2接受的是包头1的数据,缓存3接受包头2数据. 这种情况会发生嘛?
(当然这种情况可根据包头判断顺序)
问题三:一般造成缓存未接受完指定长度数据是什么原因造成的呢?
如果哪里不对,也可以发表你自己的看法
[客户端]
分成三个组包通过TCP发给iocp服务器,包发送顺序是:"包头1+123456789" "包头2+abcdefghij" "包头3+**********"
[IOCP服务器]
我每个WSARecv的缓存接受长度是:包头加10个长 ,
要接受这组数据必须同时发送三个WSARecv并创建三个缓存顺序:缓存1,缓存2,缓存3
问题一: (情况1)缓存1因其它原因数据未接受完,只收到"包头1+123" 还有"4567890"没收到,需要继续接受.
这个时候,缓存2会不会把剩下"4567890"接受完并且还能接受一部分包头2的的数据?
问题二:(情况2)缓存1接受的是包头3的数据,缓存2接受的是包头1的数据,缓存3接受包头2数据. 这种情况会发生嘛?
(当然这种情况可根据包头判断顺序)
问题三:一般造成缓存未接受完指定长度数据是什么原因造成的呢?
如果哪里不对,也可以发表你自己的看法
作者: xwzj264 发布时间: 2011-12-22
你这么短的数据不会引起二三四层重新分包的,所以不会乱的,若是打包后超出了TCP包的长度才存在拆包的可能。
在CSMA/CD中,一接是一个包的,当然这个是指底层的包的。
在CSMA/CD中,一接是一个包的,当然这个是指底层的包的。
作者: yanyuchonglou 发布时间: 2011-12-22
问题一:有可能,但也可能缓存2没能完整地接收到10个字节的长度,而又是一部分。它的机制就是这样,实际接收长度 <= 缓存大小。
问题二:这里你描述不太清楚,是包头没对上包体吗?还是说缓存1没有收到包1,顺序乱了?
如果是前一种,这种情况不会发生,head与body不会错乱,TCP本身是保序的。
如果是后一种,那是有可能的,IOCP是排队的,就看哪个WSARecv请求先入队,先入队的先收数据,在多线程的情况下,系统机制很难保证你不错序,只能靠你自己重新排序。特别是,一般等待完成通知都是多个线程同时等,即使一先一后等来了两个完成通知,你也难以判断到底是哪个通知先到的,都是多线程的问题啦。
问题三:这个就很复杂了,不是完成端口的问题,而是TCP协议栈和物理网络问题了,总之记住一点,TCP系统协议栈只能保证数据像流水一样被发送接收,作为接收端你不应该去猜度发送端的片段大小。
问题二:这里你描述不太清楚,是包头没对上包体吗?还是说缓存1没有收到包1,顺序乱了?
如果是前一种,这种情况不会发生,head与body不会错乱,TCP本身是保序的。
如果是后一种,那是有可能的,IOCP是排队的,就看哪个WSARecv请求先入队,先入队的先收数据,在多线程的情况下,系统机制很难保证你不错序,只能靠你自己重新排序。特别是,一般等待完成通知都是多个线程同时等,即使一先一后等来了两个完成通知,你也难以判断到底是哪个通知先到的,都是多线程的问题啦。
问题三:这个就很复杂了,不是完成端口的问题,而是TCP协议栈和物理网络问题了,总之记住一点,TCP系统协议栈只能保证数据像流水一样被发送接收,作为接收端你不应该去猜度发送端的片段大小。
作者: d00107916 发布时间: 2011-12-22
问题一:只要你的数据是发送成功的,服务器都能接收完整,只是要多次接收而已
问题二:会发生
问题三:这个问题比较复杂,应该跟底层的协议有关,所以发送数据得进行封装,接收数据得根据封闭的数据长度进行循环接收
问题二:会发生
问题三:这个问题比较复杂,应该跟底层的协议有关,所以发送数据得进行封装,接收数据得根据封闭的数据长度进行循环接收
作者: fishion 发布时间: 2011-12-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28