[英]Socket ReceiveAsync merging packets
我打算通過套接字接收數據包,但由於它們是從發送者以高頻率發送的,因此它們中的一些被打包成一個單byte
數組。 SocketAsyncEventArgs.Buffer
然后保存多個數據包,即使它們是單獨發送的(使用wireshark
驗證)。
我已經嘗試對傳入的數據包進行排隊並異步處理它們,但我仍然得到相同的結果。
這種行為可能是什么原因?
這就是 TCP 的工作原理。 TCP 連接是字節的雙向 stream ,你必須這樣對待它。 來自一端的單次發送可能會導致接收端進行多次讀取,反之亦然,多次發送可能會以單次讀取結束,並且傳輸不會保留應用程序消息邊界。
您必須緩沖輸入,直到您知道您有完整的應用程序消息。 常見的方法是:
我可能弄錯了,但這不是 Naggle 算法的作用嗎? 您的 sockets 應該有一個禁用此功能的標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.