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协议,可以肯定,你接收的数据的顺序与发送的数据的顺序肯定是相同的
至于楼主怎么处理接收到的数据,放到哪个缓冲区,程序都会按照楼主自己的意思来
TCP数据是流,未接收完很正常,想接收一个完整的数据包(这个完整是自己定义的,与TCP无关),一般用while循环,不过楼主用IOCP,那就把接收到的数据放到一个缓冲区里面
楼主说的情况1很明显能够发生,情况二也会发生
缓存与接收的数据无关,不过楼主要是缓存1满了再用缓冲2,再用缓冲3,情况2就不会发生
问题3:未接收完,是你自己没有收完而已,没收完就继续收,直到发生错误或收完
至于楼主怎么处理接收到的数据,放到哪个缓冲区,程序都会按照楼主自己的意思来
TCP数据是流,未接收完很正常,想接收一个完整的数据包(这个完整是自己定义的,与TCP无关),一般用while循环,不过楼主用IOCP,那就把接收到的数据放到一个缓冲区里面
楼主说的情况1很明显能够发生,情况二也会发生
缓存与接收的数据无关,不过楼主要是缓存1满了再用缓冲2,再用缓冲3,情况2就不会发生
问题3:未接收完,是你自己没有收完而已,没收完就继续收,直到发生错误或收完
作者: hnwyllmm 发布时间: 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