我使用了異步TCP/IP服務器,一切正常,但當客戶端由於錯誤或應用程序強制退出而斷開連接時,它也會關閉我的服務器,異常的類型IO.IOException。在下面的子發生異常:檢測客戶端的正確方法已從TCP/IP斷開
Private Sub ReadCallback(ByVal result As IAsyncResult)
Try
Dim client As Client = TryCast(result.AsyncState, Client)
If client Is Nothing Then
Return
End If
'MsgBox(client.ClientID)
Dim networkStream As NetworkStream = client.NetworkStream
Dim read As Integer = networkStream.EndRead(result) **' ERRORS HERE!**
If read = 0 Then
Dim client As Client = TryCast(result.AsyncState, Client)
SyncLock Me.Clients
Me.Clients.Remove(Client.ClientID)
Return
End SyncLock
End If
下面的代碼拋出IO.IOException當客戶端從我的TCP服務器斷開連接:
Dim read As Integer = networkStream.EndRead(result) **' ERRORS HERE!**
其他然後捕捉IO.IOException我怎麼能防止這首先從創建例外開始。基本上我想在這種情況發生時刪除我的客戶端,目前作爲一種解決方法,我已經刪除了IO.IOException中的客戶端並重新拋出了該方法。寧可更好的方法。
是什麼類型'client'?大多數使用套接字的類都具有連接屬性。檢查客戶端不爲空後檢查是否爲真。如果它是假的,你已經斷開 – 2012-08-12 14:49:22
@SimonHalsey不是。 isConnected()和isClosed()方法只告訴你你對套接字做了什麼,即你的端點。他們沒有告訴你有關連接的狀態,而且他們沒有像剛剛描述的那樣表現出來。 – EJP 2012-08-13 00:28:49
你是對的。這是一個糟糕的選擇。我正在考慮是否關閉了連接,而不是如果連接已關閉。 – 2012-08-14 16:49:15