Communication par socket et SocketStream
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:
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:
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