编程语言
首页 > 编程语言> > c#-检测客户端已从TCP / IP断开连接的正确方法

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