2011-07-11 88 views
1

第一次使用Socket.Send(byte []數據)時,即使遠程主機可能已經關閉連接,它也不會引發異常過去。它僅在第二次嘗試發送數據時引發異常。當遠程主機關閉連接時,Socket Send方法不會引發異常

我有檢查和方法確實返回正確的字節數發送。我也使用了一個SocketError參數的重載。這包含調用後的SocketError.Success。

爲什麼套接字不會在第一次調用時拋出異常,而只會在第二次調用時拋出異常。

回答

1

當數據已發送到本地TCP/IP堆棧的時,「發送」操作被視爲完成。它不保證數據已經到達遠程端。

+0

啊,是大多數comms內置了某種ack的原因嗎?但我也記得TCP/IP有某種內置的機制。 – uriDium

+0

TCP/IP具有數據包級確認,而不是消息級確認。 TCP/IP的設計要求您每隔一段時間發送一次輪詢或心跳消息。請參閱[我的博客](http://nitoprograms.blogspot.com/2009/05/detection-of-half-open-dropped.html)以獲取更完整的說明。 –

+0

非常感謝我研究TCP/IP協議棧。 :) – uriDium

相關問題