【问题标题】:TCP/IP detect clients who willingly disconnects themselves from my serverTCP/IP 检测愿意与我的服务器断开连接的客户端
【发布时间】:2015-11-06 00:42:48
【问题描述】:

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

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

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

【问题讨论】:

  • “根据我的研究,除非客户端向我的服务器发送 KEEP ALIVE 命令,否则无法检测到客户端是否仍处于连接状态”——这完全是错误的。一旦客户端断开连接,它们就会发送 TCP RESET 数据包,如果它们断开连接,它们只会在服务器端超时。可以使用 TCP KEEPALIVE 人为地缩短此超时时间。就是这样。
  • 看来这个问题只是对您其他问题的改写:如果您可以检测到某人是否仍然连接,您可以检测到他们断开连接(通过反复检查他们是否仍然连接)。同样,如果您可以检测到它们断开连接,则可以知道它们是否仍然连接。您能否解释一下您需要哪些信息而不是其他问题的(正确)答案?
  • @jwg 我之前的问题说明是否可以检测到current,而这个问题说明是否可以检测到willingly 的客户。我认为这是两种不同的情况,对吧?
  • @specializt 谢谢,是的,我忘了提到它也是可能的。请查看我的编辑。

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


【解决方案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,则您的客户端/服务器已断开连接或超时。

【讨论】:

  • 这两个错误我该怎么办? 1.'strRetPage' is not declared. It may be inaccessible due to its protection level. 2.'EPhost' is not declared. It may be inaccessible due to its protection level.
  • 如果对等方已完全断开连接,则套接字将变得可读,并且读取它将返回零。没有错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多