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 :
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);
}
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
 
while(socket_event.DataAvailable)
<div style="margin-left:40px">list_tag.Add(stream_event_reader.ReadLine();</div>
Normalement, tant que j'ai des données sur la socket, la boucle se fait.
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