Salut,
j'ai un problème de gestion de mémoire en utilisant les sockets. L'application est assez simple. Un lecteur envoi des événements sur un port. L'appli reçoit, puis traite l'info.
Initialisation :
Jusque là, tout va bien. La réception des données se fait :
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 private Socket m_socket_event; private NetworkStream socket_event; private StreamReader stream_event_reader; //.... plus tard dans le code if (this.m_socket_event != null)throw (new Exception("La socket du port événement est déjà connectée"));IPEndPoint port_event = new IPEndPoint(f_IPAddress, Int32.Parse("30008")); m_socket_event = new Socket(port_event.AddressFamily, SocketType.Stream, ProtocolType.Tcp); m_socket_event.Connect(port_event); if (m_socket_event.Connected == true) {socket_event = new NetworkStream(m_socket_event);stream_event_reader = new StreamReader(socket_event);}
Normalement, tant que j'ai des données sur la socket, la boucle se fait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while(socket_event.DataAvailable) <div style="margin-left:40px">list_tag.Add(stream_event_reader.ReadLine();</div>
Le problème est sur le normalement que je devrais changer en théoriquement.
Exemple :
sur 2 lectures indépendantes, je vais recevoir 30 messages de la première lecture. Puis 25 messages de la seconde qui se passe, disons 20 sec plus tard. Les messages des 2 lectures sont bien distinct.
Lors de la seconde lecture, je reçois des messages de la première. C'est à dire que lors de ma première lecture, j'aurais du recevoir 35 messages, puis 20 à la seconde.
Apparemment le socket_event.DataAvailable est à false, alors qu'il doit rester des données dans la socket.
Je ne m'explique pas le problème.
Si qqun a une idée de la provenance ou une alternative au code présentée... je suis preneur.
Merci
Partager