我使用了异步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