begin process at 2012 05 28 13:15:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Réseau & Internet

 > 

Application Client/Serveur TCP/IP: pertes de trames


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

Application Client/Serveur TCP/IP: pertes de trames

lundi 25 janvier 2010 à 15:39:42 | Application Client/Serveur TCP/IP: pertes de trames

LaTatadu91


Bonjour,

Je développe actuellement une application multithread en C++ sous Visual Studio 2005.
Ce programme a pour but d'effectuer des calculs cycliquement et est dépendant de trames TCP/IP reçues d'un autre PC.
j'ai donc un thread dédié à cette communication TCP/IP (dans laquelle je suis client)
et un thread dédié aux différents calculs et rapports...(il est à noté que ces calculs peuvent prendre beaucoup de mémoire CPU et donc de temps)

En marche normale je reçois des trames TCP/IP que je décompose (par exemple : identifiant message sur 2 caractères+ data1 sur 4 + data2 +...) et ainsi de suite.

Le problème que je rencontre actuellement est que :par moment je reçois une trame qui se décompose incorrectement : comme si je n'avais pas reçu le début du message (l'identifiant)
du coup le message est perdu!
donc ma supposition est que le thread de calcul bloque mon application et donc par moment je ne reçois plus correctement mes trames....
je ne sais pas quoi faire, car en cours j'ai appris que les trames TCP/IP sont normalement envoyées et contrôlées donc aucune perte possible...

j'espère avoir bien décrit mon problème, et que quelqu'un saura ce qu'il est possible de faire.

résumé : mon application multithread
thread 1 : Calcul --> tourne indéfiniment --> lance des fonctions de rapports .txt ou SQL
thread 2: TCP/IP --> Recv--> décomposition de message --> suivant le cas Send --> lancement de calculs (plus ou moins long) puis retour à Recv etc..... (boucle infinie)

Merci d'avance,


 
lundi 25 janvier 2010 à 18:13:27 | Re : Application Client/Serveur TCP/IP: pertes de trames

aardman

Membre Club
Salut,
En effet, aucune perte possible en tcp, mais ça ne signifie pas pour autant qu'un send coté client correspondra à un recv coté serveur, c'est a mon avis la que se situe ton problème. tu utilises le mot trame comme s'il s'agissait du mot datagram comme en udp, alors que ce n'est pas le cas.
lundi 25 janvier 2010 à 18:20:27 | Re : Application Client/Serveur TCP/IP: pertes de trames

LaTatadu91

Oui je pense parfois mal utilisé certains termes technique, justement comment être sur de faire correspondre un send à un recv?
si par exemple je me fais bombarder de 200 messages/minutes? (j'exagère là...)


 
lundi 25 janvier 2010 à 19:43:32 | Re : Application Client/Serveur TCP/IP: pertes de trames

aardman

Membre Club
Salut,
tu ne peux pas, c'est à toi de développer ton programme en tenant compte de ce comportement.
En général, deux techniques sont utilisées pour pouvoir recomposer les messages reçus:
- utiliser un séparateur entre les messages (typiquement, les protocoles qui contiennent des commandes ascii comme pop, smtp, http, ftp, irc, ...) utilisent la suite de caractère \r\n.
- préfixer ton message par sa taille: par exemple, le premier octet de ton message correspond à la taille des données qui suivent.
lundi 25 janvier 2010 à 20:10:03 | Re : Application Client/Serveur TCP/IP: pertes de trames

LaTatadu91


Oui, on peut utiliser un prefix correspondant à la taille du message, mais je ne vois pas en quoi cela va m'aider ...
concrètement ce qui arrive est :
normal: je reçois id-size-data1-data2-data3...
problème je reçois data1-data2-....

c'est comme si dans ma boucle , au moment de revenir au Recv, "j'arrivais trop tard" et du coup certains messages ou parties de message sont perdues!


 
lundi 25 janvier 2010 à 20:40:05 | Re : Application Client/Serveur TCP/IP: pertes de trames

aardman

Membre Club
Salut,
tu l'a dis toi même: aucune perte n'est possible en tcp. ça veut donc dire que si tu recois data1-data2- lors d'un recv, c'est que tu as déja recu id-size- lors du recv précédent (surement collé a la fin du message précédent).
lundi 25 janvier 2010 à 22:54:56 | Re : Application Client/Serveur TCP/IP: pertes de trames

LaTatadu91

Ouais c'est une piste à suivre!
merci des conseils, je vais tacher de programmer un peu plus profondément pour pallier à ces soucis!


 


Cette discussion est classée dans : application, ip, thread, tcp, trames


Répondre à ce message

Sujets en rapport avec ce message

tcp/ip [ par Anakine ] Salut, je cherche des site complets qui parle du tcp/ip en détail. Pouvez-vous m'aider ?Merci. TCP/IP [C++ Linux G++] Pas encore poste (?) [ par Niko2012 ] Bon, je suis en train de m'initier au tcp/ip sous linux et j'en bave...je recherche:-de bon tutoriels (si vous en connaissez en francais c mieux)-des CPP et TCP/IP [ par zinotron ] je recherche de la documentation sur la programmation rezo sous winwin en cpp et notemment en ce qui concerne le maniement des ip (si possible en mode Raw Socket -> TCP/IP [ par krum ] Voila plus d'une semaine que je fouille/cherche sur les moteurs de recherches,les forums ..des sources,des tutos,des papers sur les raw sockets (sous thread et mfc [ par dambeaufort ] svp reponse urgente!!!!!!!!bonjour, je voudrais programmer des thread dans une application mfc mais je n'y arrive pas. pourriez vous me donner un exem socket tcp/ip en C [ par ravat485 ] qui peut m'aider par un exemple d'utilisation de socket en C (TCP/IP),pour envoyer des donnees??? TCP/IP [ par maitrez ] Bonjour à tous,je suis en train de créer une appli client et une appli serveur. L'appli client est un jeu qui représente pour l'instant une petite voi Client/Server TCp_IP en temps reel [ par virlix ] Bonjour tout le monde.Je suis actuellement en train de programmer sous un OS Realtime.J'aimerai y developper une server TCP_IP avec un client qui vien chat TCP/IP sous linux avec C [ par hassanamigos ] bonsoir tous le monde, alé aidez moi je vous en prie!HELP MEs'il vous pailt jé besion d'aide jé 12 projet sur le chat CLIENT/SERVEUR (TCP/IP) et plusi Programmer client TCP/IP [ par funkadelic ] On a un serveur qui balance des buffers de 16K en continu (1000 buffers par seconde par exemple).Je dois programmer un client qui donne un prompt; par


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 : 3,416 sec (3)

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