近一週我正在閱讀並試圖找到使用TCP客戶端檢查連接狀態的解決方案(使用套接字類) 在我的情況下,我有一個連接到服務器的TCP客戶端(它不受我控制),我不時要檢查連接狀態,並在必要時重新連接。 我已經閱讀了很多互聯網上的信息,但我沒有找到合適的解決方案。如何在VB.NET中使用TCP客戶端檢查TCP服務器(套接字)的連接狀態
簡而言之,這些是我在互聯網上找到並嘗試實施的方法。 但是不幸的是,我發現了一些TCP服務器關閉的情況,TCP客戶端仍在說連接
請問有人遇到過這個問題可以幫我嗎?使用輪詢
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,採用輪詢
從MSDNPrivate 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.Example
1.Example
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
原則上沒有可靠的方法來知道連接是否仍然可用而不從遠程端接收值。中間的網絡可能只是一個黑洞,你永遠不知道沒有收到什麼東西。 – usr 2014-10-08 07:56:33