TCP / IP检测自愿断开自己与服务器连接的客户端

时间:2015-08-13 07:04:01

标签: vb.net visual-studio-2013 tcp server

我正在使用Vb.Net和VS 2013,根据我的研究,除非客户端向我的服务器发送KEEP ALIVE命令或发送字符串,否则无法检测客户端是否仍然连接表示该客户端在断开连接之前将断开连接,因此我想知道是否可以检测客户端是否与我的服务器断开连接?我的意思是如果客户端自愿断开连接从服务器?

这是this的后续问题,其中我问是否可以检测当前连接的客户端到我的服务器

编辑:我已经补充说,也可以通过告诉客户端发送一串命令来指示它会在客户端实际断开连接之前自行断开连接。

1 个答案:

答案 0 :(得分:1)

我认为你应该做一些关于这个主题的教程:

https://msdn.microsoft.com/en-us/library/vstudio/ms172757(v=vs.100).aspx

并查看文档:
https://msdn.microsoft.com/en-us/library/vstudio/system.net.sockets.socket(v=vs.100).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
https://msdn.microsoft.com/en-us/library/vstudio/1011kecd(v=vs.100).aspx

您可以通过Poll检查套接字的当前状态,但我建议切换到OOP方法

'Creates the Socket for sending data over TCP.
Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

' Connects to host using IPEndPoint.
s.Connect(EPhost)
If Not s.Connected Then
   strRetPage = "Unable to connect to host"
End If
' Use the SelectWrite enumeration to obtain Socket status.
If s.Poll(- 1, SelectMode.SelectWrite) Then
   Console.WriteLine("This Socket is writable.")
Else
   If s.Poll(- 1, SelectMode.SelectRead) Then
      Console.WriteLine(("This Socket is readable. "))
   Else
      If s.Poll(- 1, SelectMode.SelectError) Then
         Console.WriteLine("This Socket has an error.")
      End If
   End If 
End If 

如果SelectMode.SelectErrorTrue,则您的客户端/服务器已断开连接或超时。