Comment vérifier l'état de connexion d'un Serveur TCP (Socket) avec le protocole TCP Client dans VB.NET

Pendant presque une semaine que je suis de lecture et d'essayer de trouver une solution pour le contrôle de l'état de connexion à l'aide d'un Client TCP (en utilisant la classe socket)
Dans mon scénario, j'ai un Client TCP qui est connecté à un serveur (il n'est pas contrôlé par moi) et je veux que, de temps à autre pour vérifier l'état de la connexion, puis rebranchez-le si nécessaire.
J'ai lu beaucoup d'informations sur internet, mais je n'ai pas trouver une solution adaptée.

Brièvement, ce sont les méthodes que j'ai trouvées sur internet et essayer de les mettre en œuvre.
Mais malheureusement, j'ai trouvé quelques scénarios où le Serveur TCP est fermée et que le Client TCP est encore en disant Connecté

Mai j'ai bien vouloir demander à quelqu'un qui ont rencontré ce problème m'aider?

1.Exemple à partir de 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.Exemple d'utilisation de Sondage

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.À L'Aide De Sondage

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
  • Il n'y a en principe aucun moyen fiable de savoir si la connexion est toujours utilisable sans recevoir une valeur de la distance. Le réseau entre les deux est peut-être juste un trou noir, et vous ne le savez sans recevoir quelque chose.
InformationsquelleAutor Operagust | 2012-04-23