检测客户端的正确方法已从TCP / IP断开连接

我使用了异步TCP / IP服务器,一切正常,但是当客户端由于错误或强制退出应用程序而断开连接时,由于IO.IOException类型的exception,它也会关闭我的服务器。 以下子发生exception:

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之外,我怎么能阻止它首先创建exception。 基本上我想在发生这种情况时删除我的客户端,此时作为解决方法,我已经删除了IO.IOException上的客户端并重新抛出了该方法。 宁愿采用更好的方法。

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

希望这可以帮助 :

 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IAsyncResult result = socket.BeginConnect(_ip, Port, null, null); bool success = result.AsyncWaitHandle.WaitOne(500, true); // 500 is milisecods to wait if (socket.Connected && socket.IsBound && success) { // do your work }else { // open a new connection or show your message to user }