Bonjour,
Je travaille sur une application qui doit traiter des messages d'un automate transmis via TCP-IP.
Ne disposant pas de l'automate concerné j'ai créé un simulateur qui fournit un serveur TCP-IP envoie des messages types.
La lecture du message côté client se fait nécessairement par StreamReader.Peek() car les Read() et ReadLine() ne fonctionnent pas sur les messages réels de l'automate.
Le problème que je rencontre est que le buffer côté client ne se vide pas malgré la commande DiscardBufferedData() si bien que les messages s'ajoutent continuellement dans le buffer que je relis en entier à chaque fois.
Voici un extrait résumé de la partie "serveur" du simulateur:
Et voici la partie réception du message par l'appication cliente:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 dim serverSocket as TcpListener = New TcpListener(IPAddress.Any, Integer.Parse(IP)) serverSocket.Start() dim client as TcpClient = serverSocket.AcceptTcpClient() Dim networkStream As NetworkStream = client.GetStream() If networkStream.CanWrite Then Dim myWriteBuffer As Byte() = Encoding.UTF8.GetBytes(STX & message & ETX) networkStream.Write(myWriteBuffer, 0, myWriteBuffer.Length) Else MsgBox("Echec de l'écriture TCP: CanWrite = false") End If
Merci de bien vouloir m'expliquer où est mon erreur, tous les exemples que je trouve ne font référence qu'à des lectures de fichiers textes, je n'ai pas trouvé d'exemple de lecture de flux TCP-IP.
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 Dim networkStream As NetworkStream = clientSocket.GetStream() Dim reader As New StreamReader(networkStream) While Continuer = True Try Dim Message As String = "" Do While reader.Peek() > 0 Dim c As Integer = reader.Read() Message &= Chr(c) Loop reader.DiscardBufferedData() If Message <> "" Then ...
![]()
Partager