我試圖得到更好的異步使用套接字的句柄。根據這篇文章,http://msdn.microsoft.com/en-us/library/bew39x2a(v=VS.85).aspx,我應該能夠檢查EndReceive返回的字節數,如果它爲零,我知道我有所有的數據,如果它非零,可能有或可能沒有更多的數據未來。這是有道理的,但是當我最後一次調用BeginReceive時,通常在調用回調函數前幾分鐘...我假設某些東西需要超時,但更改Socket.ReceiveTimeout屬性似乎沒有效果。EndReceive什麼時候返回零字節
這真的是正確的模式,用於確定我何時收到所有數據?特別是當我不知道我收到的消息的格式?
所以基本上,它是發送者的responsib在完成數據傳輸後關閉套接字?啊...我在編寫代理服務器的情況下這樣做,所以發件人是一個Web服務器。 Web服務器是否將套接字打開以處理來自同一客戶端的後續請求? – joelt 2010-10-19 17:27:19
@ joelt:這取決於協議。在HTTP 1.0中,每個連接只對一個請求/響應對開放,所以服務器關閉了套接字。對於1.1,客戶端可以請求連接保持活動狀態。然後包含響應的長度,客戶端應該只嘗試讀取那麼多的數據。 – 2010-10-19 17:33:05