c# - 检测客户端与 TCP/IP 断开连接的正确方法

标签 c# vb.net asynchronous tcp tcpserver

我使用了异步 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 服务器断开连接时,以下代码抛出 IO.IOException:

Dim read As Integer = networkStream.EndRead(result) **' ERRORS HERE!**

然后捕获 IO.IOException 我怎样才能防止它首先创建异常。基本上我想在这种情况发生时删除我的客户端,目前作为解决方法我已经删除了 IO.IOException 上的客户端并重新抛出该方法。宁愿有更好的方法。

最佳答案

异常方式。没有 TCP API 或回调告诉您连接中断。你必须阅读或写作才能找到答案。出于可靠性原因,这是深入 TCP 设计的。

关于c# - 检测客户端与 TCP/IP 断开连接的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11921966/

相关文章:

c# - 如何使用 Linq 和 XML 实现通用方法方法

vb.net - 修改 PdfSharp vb.net 中的线宽

c# - 是否可以从 VB.Net 迁移到 C# 以便与 Mac 一起使用

vb.net - 从资源文件设置自定义光标

node.js - Node.js 上的异步/流系列

c# - Monitor.Pulse/Wait 的异步版本

c# - 无法在 C# 中异步运行方法

c# - (DataGridView + Binding)如何根据绑定(bind)的对象给线条上色?

c# - 手动绘制项目时 ComboBox 更改样式

c - 来自未知来源的 MPI 异步广播