gpt4 book ai didi

.net - 如何在VB.NET中检查与TCP客户端的TCP服务器(套接字)的连接状态

转载 作者:行者123 更新时间:2023-12-03 11:56:06 26 4
gpt4 key购买 nike

在将近一个星期的时间里,我正在阅读并试图找到一种使用TCP客户端(使用套接字类)检查连接状态的解决方案
在我的方案中,我有一个连接到服务器的TCP客户端(不受我控制),我希望它不时检查连接状态,并在必要时重新连接。
我已经在互联网上阅读了很多信息,但是没有找到合适的解决方案。

简而言之,这些是我在互联网上发现并尝试实现的方法。
但是不幸的是,我发现某些情况下TCP服务器已关闭,而TCP客户端仍在说“已连接”。

我可以请遇到这个问题的人帮我吗?

1.来自MSDN的示例

Private Function IsConnected(tcpSocket As Socket) As Boolean
Dim blockingState As Boolean = tcpSocket.Blocking
IsConnected = False
Try
Dim tmp(0) As Byte
tcpSocket.Blocking = False
tcpSocket.Send(tmp, 0, 0)
Return True
Catch e As SocketException
If e.NativeErrorCode.Equals(10035) Then
Return True
Else : Return False
End If
ThrowError(e)
Finally
tcpSocket.Blocking = blockingState
End Try
End Function

2.使用投票的例子
Function Connected() As Boolean
Connected = False
If (tcpSocket.Connected) Then
If ((tcpSocket.Poll(0, SelectMode.SelectWrite)) AndAlso (Not tcpSocket.Poll(0, SelectMode.SelectError))) Then
Dim b As Byte() = New Byte(1) {}
If tcpSocket.Receive(b, SocketFlags.Peek) = 0 Then
Return False
Else : Return True
End If
Else
Return False
End If
Else
Return False

End If
End Function

3,使用投票
Private Function Connect2() As Boolean
Connect2 = False
If tcpSocket.Poll(0, SelectMode.SelectRead) = True Then
Dim byteArray As Byte() = New Byte(1) {}
If (tcpSocket.Receive(byteArray, SocketFlags.Peek)) = 0 Then Connect2 = True
End If
Return Connect2()
End Function

最佳答案

系统通常通过实现“心跳”机制来处理此类问题,在这种机制下,客户端会定期向服务器发送“您还活着”请求。您是否可以定期向服务器发送任何便宜的,无损的请求,以确保套接字确实处于 Activity 状态?

关于.net - 如何在VB.NET中检查与TCP客户端的TCP服务器(套接字)的连接状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10281622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com