c#-检测客户端已从TCP / IP断开连接的正确方法
作者:互联网
我使用了异步TCP / IP服务器,一切正常,但是当客户端由于错误或应用程序的强制退出而断开连接时,由于IO.IOException类型的异常,它也关闭了我的服务器.异常发生在以下子段中:
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
当客户端与我的TCP Server断开连接时,以下代码将引发IO.IOException:
Dim read As Integer = networkStream.EndRead(result) **' ERRORS HERE!**
除了捕获IO.IOException外,我如何才能防止它首先创建异常.基本上,我想在发生这种情况时删除客户端,目前,作为解决方法,我已在IO.IOException上删除了客户端并重新抛出了该方法.宁愿是更好的方法.
解决方法:
例外是方式.没有TCP API或回调可以告诉您有关断开的连接的信息.您必须读或写才能找到答案.由于可靠性的原因,它被深深地设计在TCP中.
标签:asynchronous,tcp,tcpserver,vb-net,c 来源: https://codeday.me/bug/20191127/2076950.html