2010-12-03 159 views
1

我有一個服務器/客戶端套接字應用程序,並從http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx上的示例看起來都是服務器和客戶端關閉並在收到數據後關閉連接。是這樣嗎? 我一直在使用斷開,但我無法重新連接,而是使用shutdown /關閉:誰關閉了套接字連接

  if (_sender.Connected) 
      { 
       _sender.Shutdown(SocketShutdown.Both); 
       _sender.Close(); 
      } 

似乎很好地工作。但是這應該在客戶端(發起者)和服務器(收件人)套接字上調用嗎? 謝謝

回答

1

您需要在客戶端和服務器上這樣做,因爲它們都使用獨立的資源。套接字在關閉時可能會混亂(很多例外),因此您要確保您同時處理客戶端和服務器上的異常。

+0

這樣做似乎是多餘的,現在我知道我肯定會把電話都留在這兩個地方。謝謝 – reckface 2010-12-03 16:42:51

0

哪一方開始關閉並不重要。如果關閉發生乾淨,那麼另一方的下一次讀取操作將讀取0字節。如果關閉沒有完全發生,那麼另一方的下一次讀取操作將引發異常。

一般來說,期望來自任何套接字方法的例外(Close除外fatal exceptions除外)不會引發異常。每當你看到一個例外,只需撥打Close

P.S. Connected沒用,在這種情況下Shutdown不會給你帶來任何好處。請致電Close

+0

謝謝。我將刪除已連接的支票。 – reckface 2010-12-03 16:42:01