我的情況是這樣的:我有一個C#tcp套接字,通過它我可以接收由3個字節的頭部和一個可變大小的有效載荷組成的結構化消息。 tcp數據通過隧道網絡進行路由,偶爾也容易發生分裂。解決方法是對頭進行3字節的塊讀取,對於可變大小的有效負載(N的值在頭中)進行N字節的塊讀取。我遇到的問題是偶爾阻塞接收操作返回一個部分數據包。也就是說,它讀取的字節數量少於我在接收調用中明確設置的數量。經過一些調試後,它返回的字節數似乎等於接收操作之前套接字的可用屬性中的字節數。C#套接字阻止行爲
這種行爲與我的期望相反。如果套接字被阻塞,並且我明確設置了要接收的字節數,那麼不應該直到套接字阻塞它的recv的那些字節?,任何幫助,指針等等都將不勝感激。
在這種情況下,C#中的阻塞和非阻塞套接字有什麼區別,甚至提供阻塞選項的意義何在?,順便說一句,謝謝。 – 2010-05-07 14:10:16
Doh !.剛剛意識到了爲什麼,阻塞套接字將在空緩衝區中掛起,直到數據進入,它只是數據量不一定等於recv調用中指定的大小。 – 2010-05-07 14:26:57