Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1203 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Socket & Synchro write/read

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Socket & Synchro write/read

n°1039306
Slayne
Yaouchhh
Posté le 07-04-2005 à 19:55:26  profilanswer
 

J'ai un petit soucis pour synchroniser la communication entre un serveur et un client.
Mon serveur envoit des données au client, en faisant plusieurs write ... en gros :
 
       Serveur                     Client
write(fd,"TEST1",5)              read(fd,bufTEST1,bufsize)
write(fd,"TEST2",5)              read(fd,bufTEST2,bufsize)
write(fd,"TEST3",5)              read(fd,bufTEST3,bufsize)
write(fd,"TEST4",5)              read(fd,bufTEST4,bufsize)
 
Tout fonctionne bien jusqu'au TEST4 ... mes 3 1ers read recoivent bien chacun TEST1,2 et 3, mais le dernier ne recoit rien du tout et attend indéfiniement.
Ce qui se passe apparemment, c'est que le write pour TEST4 se lance et renvoit 5, alors que aucun read n'est activé coté client. Le client lance ensuite son read pour le TEST4 mais ne recoit rien, puisque le write a déjà été fait pour le TEST4.  
 
Est il possible d'effectuer une synchro pour que chaque read recoivent correctement le write qui lui est associé ? Pour l'instant j'ai resolu le probleme en faisant un sleep après chaque write, mais j'espère un peu plus "propre" comme solution.

mood
Publicité
Posté le 07-04-2005 à 19:55:26  profilanswer
 

n°1039324
Taz
bisounours-codeur
Posté le 07-04-2005 à 20:11:42  profilanswer
 

"TEST4",5
 
eux ca fait 6 la

n°1039327
Slayne
Yaouchhh
Posté le 07-04-2005 à 20:15:16  profilanswer
 

Taz a écrit :

"TEST4",5
 
eux ca fait 6 la


 
C'était pour l'exemple, concretement je fais un monstring.length() +1, donc pas de soucis :)

n°1039331
IrmatDen
Posté le 07-04-2005 à 20:17:21  profilanswer
 

Tu utilises quel protocole ?

n°1039343
Slayne
Yaouchhh
Posté le 07-04-2005 à 20:42:10  profilanswer
 

J'utilise TCP : socket(PF_INET, SOCK_STREAM, 0);
 
Je vais faire un test, j'ai peut être une idée de où passe mon TEST4.


Message édité par Slayne le 07-04-2005 à 20:42:57
n°1039349
Slayne
Yaouchhh
Posté le 07-04-2005 à 20:49:10  profilanswer
 

Bon bah test echoué ... je pensais que le write du TEST4 serait lu par le read du TEST3, mais en fait non, le READ du TEST 3 ne lit uniquement que le WRITE du TEST3 ...  :sweat:  
 
Mais où passe ce TEST4 ?  :sweat:

n°1039365
IrmatDen
Posté le 07-04-2005 à 20:59:38  profilanswer
 

Essaye de sniffer avec un soft ethereal
et sinon, une autre piste:

Citation :

You're probably seeing Nagle buffering. That can be disabled on Windows (and pretty much everywhere
else) by calling setsockopt with the TCP_NODELAY option.
 
Doing this will chew more bandwidth and more CPU at each end,
though. UDP may be a better match for your application, I think.


C'est tiré d'un sujet sur Qt, à voir ce que ça peut donner dans ton cas...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Socket & Synchro write/read

 

Sujets relatifs
solution pour probleme d´applet signé mais sans accés disque ou socketSocket-SocketChannel compatible ?
[ VB.net ] type socket non défini [Résolu]Probleme de socket dans petit script sftp Perl
Probleme avec la fonction exif_read_data()[VB.NET] Envoie de fichier avec socket !!
'Text' property is read only[Java] 3 threads synchro
Problem de reponse provenant d un socket (timing?)raw socket TCP/IP
Plus de sujets relatifs à : [C++] Socket & Synchro write/read


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR