Problème d'envoi entre client et serveur

Résolu
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011 - 31 déc. 2010 à 19:30
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 1 janv. 2011 à 19:17
Bonjour à tous,

J'ai quelque soucis avec un code qui envoi du texte entre un app client et une app serveur...

Lorsque je met le code dans une sub et que j'appel la sub avec une variable, ca me donne une erreur code serveur et si j'appel la sub sans variable ca fonctionne...

Voici les 2 code

Code Client
Imports System.Net.Sockets
Imports System.Text
Public Class Form1


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        SendMessage("Test de mes")

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
        msg("Client Started")
        Connect("ADRESSE IP ENLEVER", 8888)
        Label1.Text = "Client Socket Program - Server Connected ..."
    End Sub

    Sub msg(ByVal mesg As String)
        TextBox1.Text = TextBox1.Text + Environment.NewLine + " >> " + mesg
    End Sub
    Dim clientSocket As New System.Net.Sockets.TcpClient()
    Dim serverStream As NetworkStream

    Public Sub Connect(ByVal clientIP As String, ByVal clientPort As Integer)
        clientSocket.Connect(clientIP, clientPort)
    End Sub
    Public Sub SendMessage(ByVal clientMessage As String)
        Dim serverStream As NetworkStream = clientSocket.GetStream()
        clientMessage += "&"
        Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes(clientMessage)
        serverStream.Write(outStream, 0, outStream.Length)
        serverStream.Flush()

        Dim inStream(10024) As Byte
        serverStream.Read(inStream, 0, CInt(clientSocket.ReceiveBufferSize))
        Dim returndata As String = _
        System.Text.Encoding.ASCII.GetString(inStream)
        msg("Data from Server : " + returndata)
    End Sub
End Class


Code Serveur

Imports System.Net.Sockets
Imports System.Text
Imports System.Net
Module Module1
    Sub Main()
        Dim serverSocket As New TcpListener(Dns.GetHostEntry(Dns.GetHostName).AddressList.GetValue(0), 8888)
        Dim requestCount As Integer
        Dim clientSocket As TcpClient
        serverSocket.Start()
        msg("Server Started")
        clientSocket = serverSocket.AcceptTcpClient()
        msg("Accept connection from client")
        requestCount = 0

        While (True)
            Try
                requestCount = requestCount + 1
                Dim networkStream As NetworkStream = _
                        clientSocket.GetStream()
                Dim bytesFrom(10024) As Byte
                networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
                Dim dataFromClient As String = _
                        System.Text.Encoding.ASCII.GetString(bytesFrom)
                dataFromClient = _
            dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
                msg("Data from client -  " + dataFromClient)
                Dim serverResponse As String = _
                   "Server response " + Convert.ToString(requestCount)
                Dim sendBytes As [Byte]() = _
                    Encoding.ASCII.GetBytes(serverResponse)
                networkStream.Write(sendBytes, 0, sendBytes.Length)
                networkStream.Flush()
                msg(serverResponse)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End While


        clientSocket.Close()
        serverSocket.Stop()
        msg("exit")
        Console.ReadLine()
    End Sub

    Sub msg(ByVal mesg As String)
        mesg.Trim()
        Console.WriteLine(" >> " + mesg)
    End Sub


End Module




Donc, dans la sub SendMessage, si j'utilise la ligne suivante
Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes(clientMessage)

ouclientMessage est déclarer dans la sub, ca ne fonctionne pas mais par contre, si j'utilise la ligne:
Dim outStream As Byte() = System.Text.Encoding.ASCII.GetBytes("Test de message&")

ca fonctionne...

Voici l'erreur de le code Serveur me retourne

3 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 janv. 2011 à 11:37
salut,

ton explication est un peu étrange....

tu envoies au moins un &, pour chercher la position d'un $


une fois ce problème corrigé et les variables correctement déclarées côté serveur, c'est à dire avant la boucle, çà semble fonctionner :


 >> Server Started
 >> Accept connection from client
 >> Data from client -  Test de mes
 >> Server response 1
 >> Data from client -  Test de mes
 >> Server response 2
 >> Data from client -  Test de mes
 >> Server response 3


++

[hr]
3
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
1 janv. 2011 à 17:27
Bonjour PCPT...


J'ai presque honte.pour le $...je devais etre trops fatiqugué. J'ai récuperer le code sur le net hier et j'avais pas remarquer ...


Est-ceque tu peut t'expliquer sur la déclaration des variables avant la boucle, je ne suis pas certain de te comprendre..
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 janv. 2011 à 19:17
while true
  dim s as string = "chaine"
end while


avant même de tester j'ai de suite modifié
dim s as string
while true
  s = "chaine"
end while



autant vb.net permet la déclaration et l'instanciation en une seule ligne, autant il me semble totalement illogique de faire ces 2 actions dans une boucle

++
0
Rejoignez-nous