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) :
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 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
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).
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
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![]()
Partager