Bonjour,

Je viens poster ici, car je n'arrive pas à trouver la solution à mon problème. En effet, je suis actuellement en train d'élaborer un jeu d'échecs jouable en réseau et utilisant le protocole TCP. Jusqu'ici tout va bien (du moins en local), j'arrive à faire communiquer deux applications via le serveur. Le problème, c'est qu'après avoir communiqué aux applications leur information respective (pseudo du joueur), je n'arrive à communiquer QU'UNE SEULE FOIS les paramètres des déplacements réalisés par les joueurs.
J'arrive en fait à effectuer un coup, à en envoyer les coordonnées au serveur puis à les transmettre à l'autre application. Je le refais ensuite dans l'autre sens. Une fois ceci fait, je peux faire n'importe quel coup, j'arrive à communiquer l'information au serveur, mais pas à la retransmettre à la deuxième application. En fait, lors de la lecture du flux par celle-ci, ce dernier est vide (alors que le serveur avait bien reçu les informations et arrivait auparavant à les retransmettre).

J'aimerais donc savoir comment régler ce problème.

Je fournis à ceux qui prendront le temps de m'aider les deux routines que j'utilise du côté de l'application (le tcp est déclaré de façon globale) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    Private Sub ecriture_flux(ByVal msg As String)
        Try
            Dim encode() As Byte
            encode = Encoding.ASCII.GetBytes(msg)
            flux = tcpcl.GetStream()
            flux.Write(encode, 0, encode.Length)
        Catch ex As Exception
            MsgBox("ecriture_flux : " & ex.ToString)
        End Try
    End Sub
 
    Private Function lecture_flux() As String
        Try
            Dim encode(tcpcl.ReceiveBufferSize) As Byte
            flux = tcpcl.GetStream
            flux.Read(encode, 0, tcpcl.ReceiveBufferSize)
 
            Return Encoding.ASCII.GetString(encode)
        Catch ex As Exception
            MsgBox("lecture_flux : " & ex.ToString)
            Return "ERREUR"
        End Try
    End Function
Et du côté serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    Private Function lecture_flux(ByVal tcpcl As TcpClient) As String
        Try
            Dim flux As NetworkStream
            Dim recup_encode(tcpcl.ReceiveBufferSize) As Byte
 
            flux = tcpcl.GetStream()
            flux.Read(recup_encode, 0, CInt(tcpcl.ReceiveBufferSize))
 
            ' enregistrement dans le log détaillé
            log_flux.Items.Add("Lecture : " & Encoding.ASCII.GetString(recup_encode))
 
            Return Encoding.ASCII.GetString(recup_encode)
        Catch ex As Exception
            MsgBox("Erreur lors de la lecture du flux : " & ex.Message)
        End Try
        Return 0
    End Function
 
    Private Sub ecriture_flux(ByVal tcpcl As TcpClient, ByVal envoi As String)
        Try
            Dim encode(tcpcl.ReceiveBufferSize) As Byte
            encode = Encoding.ASCII.GetBytes(envoi)
 
            Dim flux As NetworkStream
 
            flux = tcpcl.GetStream()
            flux.Write(encode, 0, encode.Length)
 
            log_flux.Items.Add("Ecriture : " & envoi)
 
        Catch ex As Exception
            MsgBox("Erreur lors de l'écriture sur le flux : " & ex.Message)
        End Try
    End Sub
Je me demandais aussi si le fait de toujours mettre le offset à 0 était mauvais (en principe non puisque ça devrait permettre d'écraser les données précédentes).

Merci d'avance à ceux qui prendront le temps de m'aider (même si je suis sûr qu'il ne s'agit que d'un tout petit truc à changer).

@ bientôt