簡體   English   中英

Socket ReceiveAsync 合並數據包

[英]Socket ReceiveAsync merging packets

我打算通過套接字接收數據包,但由於它們是從發送者以高頻率發送的,因此它們中的一些被打包成一個單byte數組。 SocketAsyncEventArgs.Buffer然后保存多個數據包,即使它們是單獨發送的(使用wireshark驗證)。

我已經嘗試對傳入的數據包進行排隊並異步處理它們,但我仍然得到相同的結果。

這種行為可能是什么原因?

這就是 TCP 的工作原理。 TCP 連接是字節的雙向 stream ,你必須這樣對待它。 來自一端的單次發送可能會導致接收端進行多次讀取,反之亦然,多次發送可能會以單次讀取結束,並且傳輸不會保留應用程序消息邊界。

您必須緩沖輸入,直到您知道您有完整的應用程序消息。 常見的方法是:

  • 固定長度的消息,
  • 消息前面的前置長度,
  • 用特殊的“消息結束”分隔符分隔 stream。

我可能弄錯了,但這不是 Naggle 算法的作用嗎? 您的 sockets 應該有一個禁用此功能的標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM