begin process at 2012 05 29 15:32:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Réseau & Internet

 > 

Perte de messages


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Perte de messages

vendredi 11 septembre 2009 à 19:32:01 | Perte de messages

mohdaef

Bonjour à tous

Je suis entrain de programmer un petit multijoueur, et pour cela je doit échanger des messages entre les différents programmes.

Pour cela j'ai un pile qui accumule l'ensemble des messages à envoyer, ensuite j'un thread qui contien un boucle infinie qui prélève les messages dans la pile et les envois par le biais de la méthode send().

De l'autre côté c'est l'inverse j'ai un thread avec une boucle infinie qui récupére les messages par la méthode recv(), et qui les empiles dans la pile pour qu'il puissent être traités ultérieurement.

La première pile fonctionne correctement les message s'enregistre bien dans l'ordre et à la suite, le thread prélève et envoie les message sans erreurs (la méthode send() ne renvoie pas d'erreurs).
Le problème est que de l'autre côté la méthode recv ne récupère pas l'intégralité des messages.

J'ai utilisé la méthode Sleep() pour ralentir la fréquence d'envoie des messages et là tous les messages passent correctement.

A priorie je ne devrais pas avoir à utiliser d'appel à la méthode Sleep(). Pouvez-vous m'en dire plus sur ce comportement étrange ?

Un grand merci d'avance ça fait pas mal de temps que je suis dessus.

mardi 15 décembre 2009 à 23:46:57 | Re : Perte de messages

Scooper

Salut,

Je pense que tous tes messages arrivent de l'autre coté mais pas dans la forme ou tu le souhaites.

Je m'explique :

du coté serveur tu as une boucle qui envoie tes messages à la suite sous un format que tu as défini, (0xFF début et 0xAA fin du message) par exemple :
1er send
0xFF message1 0xAA
2ème send
0xFF message2 0xAA
...

et de l'autre coté, tu risque de recevoir plusieurs messages en seul flot de données :
1 seul receive :
0xFF message1 0xAA0xFF message2 0xAA0xFF message3 0xAA

regarde le contenu de ton buffer de réception ou avec Wireshark.

La solution est de faire une boucle qui parcourt les données que tu as reçu afin de toutes les traiter.

Sinon tu peux essayer l'option TCP_NODELAY qui permet de désactiver l'algorithme de Nagle mais tu utilisera plus de bande passante.


Cette discussion est classée dans : messages, perte, thread, méthode, pile


Répondre à ce message

Sujets en rapport avec ce message

Passage d'une structure à un thread [ par valoue ] Bonjour,Voilà, j'aurais une petite question.Je travaille sous VC++(.net) et je créé un thread depuis une procédure.J'ai donc une méthode/* Emission d' message de la pile [ par cyber_al ] bonjoursj'ai une petitte question a poser concernant les messages de la pile ,explications:mon application principale me permet de lancer une dll avec PostThreadMessage / GetMessage : perte de messages [ par swonder ] Bonjour,J'ai un problème de perte de messages dans la communication inter-thread, que je suppose dû au fait que GetMessage n'a pas de file d'attente d Cross-thread operation [ par hrp ] Bonjour,j'aimerai créer une class possédant des événements. Cette class lance également un thread qui va déclancher l'événement. Dans le code où est i Attacher Callback à un Thread [ par melkiorlenecrarque ] Bonjour à tous ! Le titre est assez parlant je trouve ;)Je devellope une application client/serveur et je voudrais que les messages WM_SOCKET soient g perte de paquets UDP dans un thread quand l'autre thread fait un write() [ par fabricius ] Hello,Voila mon problème, ca fait bien une semaine que je suis dessus...J'ai écrit un soft qui écoute une socket UDP, qui reçoit des paquets et qui le Win32 - parcourir la pile utilisateur d'un thread [ par BlackGoddess ] Bonjour,  je voudrais parcourir la pile utilisateur d'un thread. J'ai essayé en utilisant GetThreadContext, en sauvegardant Esp a la création du threa Client - serveur C++ avec thread [ par nono_in_maribor ] Bonjour!!Voila, je previens tout de suite je ne suis pas un pro du c++. Mon probleme est le suivant : j'ai fait un client-serveur en c++ (sous devc++) LAN Socket et multi thread [ par RV2931 ] Bonjour, Je suis en train d'essayer de faire un chat en réseau, chaque machine est client/serveur sur un port. Mais on m'a conseillé de faire un threa [API Win32 sans MFC] Lecture port série: thread bloqué [ par nitrique ] Bonjour à tous, Je lis des données dès qu'elle arrivent sur le port COM avec la fonction WaitCommEvent. Pour éviter de figer l'application, j'util


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales