Salut tout le monde, j’ai un p’tit problème avec les Sockets, TcpClient et compagnie.
J’ai un service windows qui tourne et qui reçoit des ordres par TCP/IP.
C’est pas moi qui ai fait ce service.
A chaque fois qu’il reçoit une commande, il répond qqch.
Par ex, à la connection il me répond 5000 HELLO
Ensuite, je lui indique quelle version de protocole utiliser et il doit me répondre 5001 OK mais il me réponds de nouveau 5000 HELLO.
Voilà mon bout de code
[cpp]
Dim TcpClient As TcpClient
Dim SmsId As String = “rien”
Dim NS As NetworkStream
Private Sub connecter()
Dim request As String
Try
TcpClient = New TcpClient
TcpClient.Connect("127.0.0.1", 2727)
NS = TcpClient.GetStream()
'Je récupère la réponse du serveur à la connection
Dim bytes(TcpClient.ReceiveBufferSize) As Byte
NS.Read(bytes, 0, CInt(TcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.
Dim returndata As String
returndata = Format(Encoding.ASCII.GetString(bytes).Trim)
lbRetour.Items.Insert(0, returndata)
Select Case returndata
Case "5000 HELLO"
lblConnexion.Text = "Connection OK"
Case "5901 MAX_CONNECTION_REACHED"
lblConnexion.Text = "Nb de connexions max autorisées atteint"
Case "5999 SERVER ERROR"
lblConnexion.Text = "Erreur 5999"
Case Else
lblConnexion.Text = "Erreur inconnue"
End Select
'on définit la version du protocole
request = "5002 PROTOCOL_VERSION=1" & "\n"
'j'envoies la commande au serveur
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("")
sendBytes = Encoding.ASCII.GetBytes(request)
NS.Write(sendBytes, 0, sendBytes.Length)
'je récupère sa réponse
NS.Read(bytes, 0, CInt(TcpClient.ReceiveBufferSize))
' Output the data received from the host to the console.
returndata = Format(Encoding.ASCII.GetString(bytes).Trim)
lbRetour.Items.Insert(0, returndata)
Select Case returndata
Case "5001 OK"
lblConnexion.Text = "Protocole OK"
Case "5003 INVALID_PROTOCOL_VERSION"
lblConnexion.Text = "Protocole invalide"
Case "5999 SERVER ERROR"
lblConnexion.Text = "Erreur 5999"
Case Else
lblConnexion.Text = "Erreur inconnue"
End Select
Catch err As Exception
MsgBox(err.ToString)
End Try
End Sub
[/cpp]
Mon problème est que mon serveur ne répond pas ce qu’il faut (je suis sûr qu’il marche)
Je pense que le problème vient de la façon d’interroger mon NetworkStream.
Comment faire pour vider le contenu de la Stream apres la 1ere lecture (c’est peut etre automatique ???)
Qd j’envoies la commande pour la version du protocole et que je lis la réponse, est-ce que je dois gérer à la main le fait d’attendre la réponse du serveur ou c’est automatique ??
Voilà, en fait je sais pas trop quoi faire là.