Forum Clubic

[VB.NET] Socket

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à.

jamais touché au socket, bouge pas je jette un oeil dans ma knowledge database au taf…

keudal… regarde peut etre ici : http://www.vbfrance.com/code.aspx?ID=20110

si j’ai le temps ce soir après que ma valentine fasse dodo, je regarde dans mes bouquin…

Merci Cyber mais je viens d’avoir celui qui a créé le service. Il m’a expliqué rapidement comment faire. Je vais voir ce que ça donne :stuck_out_tongue:

Bon, je viens de coder la meme chose en C# et ça marche dc y a un pb avec le VB.NET :frowning: