Salut,
J'ai programmé une application serveur-client (1 serveur et 1 client seulement) pour un transfert des fichiers. Très vite je me suis aperçu qu'il faut créer un dialogue entre le serveur et le client pour synchroniser cette application sinon le client n'arrive plus à suivre le flux de données transféré par le serveur.
Serveur------------------Client
boucle while--------------boucle while
send(taille) ==========> recv(taille) (1)
recv(dialogue) <======= send(dialogue) (2)
send(données) =======> recv(données) (3)
Le recv() du coté serveur étant bloquante, me permet d'évite au client d'être débordé par 2 send() successifs. J'ai remarqué surtout que cette configuration fonctionne pour un petit nombre de fichiers. Dès qu'on commence à transférer une quantité importante de fichiers, tous ces recv() et send() ne sont plus synchronisés et le programme fait n'importe quoi. La seule solution que j'ai trouvé pour l'instant c'est d'insérer des fonctions comme sleep() ralentir la boucle coté serveur mais le cadre dans lequel cette application sera utilisée n'autorise pas ce genre de fonctions.
Y a il un moyen de garantir qu'une information envoyée par le send() au niveau (1) puisse être capter par le recv() du niveau (1) et de même pour les autres send() et recv() des deux autres niveaux ?
merci.
Partager