I utilisé le code suivant dans VB6.0 pour objet Winsock tcpclient:analogique tcpClient.State dans vb.net (contre VB6.0)
Dim SConst(10) As String
Dim st As Integer
SConst(0) = "Closed"
SConst(1) = "Open"
SConst(2) = "Listening"
SConst(3) = "ConnectionPending"
SConst(4) = "ResolvingHost"
SConst(5) = "HostResolved"
SConst(6) = "Connecting"
SConst(7) = "Connected"
SConst(8) = "Closing"
SConst(9) = "Error"
st = tcpClient.state
TextBox1.Text = SConst(st)
Maintenant Im using vb.net et que vous voulez faire quelque chose même. Mais il n'y a pas de méthode .state
maintenant pour TcpClient
objets! Il n'y a que cpClient.Connected
mais il renvoie Boolean
donc seulement oui ou non. Comment puis-je le faire comme VB6.0?
En utilisant Visual Vinsent's answer je fait ceci:
Public Class Form1
Dim status1 As String
Dim status2 As String
Private Sub Btn_Connect5001_Click(sender As Object, e As EventArgs)_
Handles Btn_Connect5001.Click
' Create TcpClient and Connect to
tcpclnt2 = New TcpClient
Try
tcpclnt2.Connect("192.168.1.177", 5001)
Catch
End Try
End Sub
Private Sub Btn_Disconnect5001_Click(sender As Object, e As EventArgs)_
Handles Btn_Disconnect5001.Click
' Close TcpClient
tcpclnt2.Close()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
' Check status every 300ms
status2= New IPEndPoint(IPAddress.Parse("192.168.1.177"),5001).GetStatus().ToString()
TextBox1.Text = Dns.GetHostName + Environment.NewLine +
"port 1 " + status2 + Environment.NewLine
End Sub
End Class
Le problème est: Au début status2
est "inconnu", si je me connecte pour la première fois status2
est "établie". Si je déconnecte c'est devenu "TimeWait". Mais si je me connecte une fois de plus, il reste "TimeWait". Il ne change jamais sa valeur alors.
Comme vous le voyez dans Wikipedia article les états TCP sont un peu différents de Winsock de VB6. –
parfait comme toujours! Merci de m'avoir beaucoup aidé! Je ne comprends toujours pas tous les détails donc je le lis maintenant, mais je l'ai déjà essayé et ça marche! Je crée l'objet Timer et vérifie l'état de mon IP et de mes ports actuels (votre méthode 3d). Mais je fais face à un problème: j'ai d'abord une valeur "Unknown", puis "Established" après avoir connecté mon tcpClient. C'est bon. Ensuite, je déconnecte mes clients ('tcpClient.Close()') et obtient "TimeWait". Et maintenant je me connecte à nouveau ('New TcpClient' et' .Connect') mais j'ai quand même des valeurs "TimeWait" (en attendant "Established" à nouveau). Donc, cela ne fonctionne que lors de la première connexion. Qu'est-ce que ça peut être? –
@Mikhail_Sam: Il affiche toujours 'Unknown' quand la connexion n'existe pas. Si une connexion peut être établie alors elle passera généralement l'état 'SynSent' si vite que vous ne le remarquerez pas, d'où la raison pour laquelle elle est' Established' immédiatement après. –