在單個執行緒,注意:只有一個執行緒呼叫WSASend, 然后不停的發資料包
客戶端因為網路原因可能會接收比較慢
問題1:
WSASend 第一次發送的文字是:1, 第二次發送的文字是:2,第三次是:3
問題2:
WSASend 會確保客戶端怎么能確保按照順序接收,第一次接收是1,第二次接收是2,
客戶端會不會先接收2,后接收3?
客戶端有可能會一次性接收123嗎?
注:客戶端就是普通的單執行緒接收 呼叫一個::recv(),不會去用什么重疊
uj5u.com熱心網友回復:
多執行緒同時send一個socket,你無法保證資料順序了。WSASend 一樣。uj5u.com熱心網友回復:
我說的是單執行緒,可以保證順序一致嗎?uj5u.com熱心網友回復:
我說的是單執行緒,可以保證順序一致嗎?
uj5u.com熱心網友回復:
在不失敗的情況下可以保證是順序收到, 但是可能會是同時受到123, 粘包是必須要考慮的uj5u.com熱心網友回復:
send 1成功后 再send 2 就保證順序了uj5u.com熱心網友回復:
send 1成功后 再send 2 就保證順序了
老哥,你怎么老是答非所問?
在不失敗的情況下可以保證是順序收到, 但是可能會是同時受到123, 粘包是必須要考慮的
謝謝你,那么如果,客戶端先接收1位元組,在接收剩余的部分,會亂序嗎?
此時沒有接收資料是在什么位置,在記憶體?還是在windows內核?
uj5u.com熱心網友回復:
send 1成功后 再send 2 就保證順序了
老哥,你怎么老是答非所問?
uj5u.com熱心網友回復:
我的理解是WSASend不會確保客戶端按照順序接收,但TCP或UDP協議可以,協議就是專門干這些事的,保證資料的順序性,完整性,正確性。WSASend最開始的動作應該是把你的資料拷貝到發送緩沖區,只要你按順序發,記憶體拷貝就是順序的uj5u.com熱心網友回復:
不知道有多少前人掉在TCP Socketsend(人多)send(病少)send(財富)
recv(人多病)recv(少財富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545
uj5u.com熱心網友回復:
客戶端是有可能一次接收到123的
原因是tcp是基于流的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/55925.html
標籤:網絡編程
上一篇:將套接字保存到陣列中為何無效?
