我正在爲我的分佈式系統編寫一個消息層。我正在使用IOCP,即Socket.XXXAsync方法。SocketAsyncEventArgs緩衝區充滿零
(其實,我的接收功能是基於他)我在做什麼這裏的東西很接近: http://vadmyst.blogspot.com/2008/05/sample-code-for-tcp-server-using.html
我現在發現的是,在節目的開始(二測試服務器彼此交談)我每次獲得一些SAEA對象,其中.Buffer完全填充零,但.BytesTransferred是緩衝區的大小(在我的情況下爲1024)。
這是什麼意思?有我需要檢查的特殊情況嗎?我的系統將此解釋爲不完整的消息並繼續前進,但我想知道是否實際上丟失了一些數據。我的印象是,如果沒有收到任何東西,你就不會得到回撥。在任何情況下,我都可以在WireShark中看到沒有任何零長度的數據包進來。
我在谷歌搜索中發現了以下內容,但我不確定我的問題是否相同: http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/40fe397c-b1da-428e-a355-ee5a6b0b4d2c
http://go4answers.webhost4life.com/Example/socketasynceventargs-buffer-not-ready-121918.aspx
我沒有任何數據處理錯誤丟失的數據,所以我覺得沒有任何損失。但是,這仍然留下了爲什麼該方法會幾次返回而沒有任何結果的問題。 – Carlos
如果沒有您的簡要說明(帶有代碼),很難爲您提供解決方案。不過,我有套接字的經驗,我可以推薦使用更高的抽象 - 網絡流。網絡流具有您想要使用的所有異步回調功能。查看http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.aspx和http://msdn.microsoft.com/en-us/library/system.net.sockets。 networkstream.beginwrite.aspx HTH –
它是相同的底層調用?這聽起來很有用。此外,我所指的代碼位於鏈接中。 – Carlos