Send et recv

Signaler
Messages postés
43
Date d'inscription
mercredi 24 novembre 2010
Statut
Membre
Dernière intervention
26 février 2014
-
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
-
Bonsoir,
J'ai un petit soucis avec les fonctions send et recv.
j'ai fait un petit programme qui permet d'envoyer un fichier d'un serveur à un client. Serveur sous ubuntu et client ubuntu d'abord, puis je l'ai refais, serveur sous windows avec visual C++ et client toujours sous ubuntu.
J'ai noté des différences dans les comportements de mon programme que je ne parviens pas à m'expliquer.

char buffer[VALEUR]; // VALEUR = 1000 pour commencer
char taille[20];

coté serveur :
send( sock, tailleSend, sizeof(tailleSend), 0);
send( sock, buffer, sizeof(buffer), 0);

// la premiere ligne envoie la longueur de l'envoi suivant
// la seconde envoie des morceaux du fichier coupé en tranche de tailleSend

coté serveur :
recv(sock, taille, sizeof(taille), 0);
recv(sock, buffer, sizeof(buffer), 0);

Voila, alors sur un client et serveur ubuntu, ca fonctionne et je peux même changer la valeur de VALEUR pour augmenter la quantité de donnée envoyé avec un seul send(). j'ai testé de 100 à 10000 et le transfert a abouti d'une machine à l'autre ( plus rapidement ).

Ca marche également d'un serveur sous windows compilé sous visual C++, mais la valeur max que j'ai pu donner à VALEUR est d'à peu près 1200.
Ce qui ne permet pas de transférer mon fichier assez vite à mon gout...
d'ou mes questions :
Comment rendre le transfert de ma machine sous windows à celle sous ubuntu plus rapide ? Et pourquoi entre les deux machines ubuntu cela est possible ...
Merci.

1 réponse

Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Salut,

Il y a une option qui permet de dimensionner le buffer d'émission :

setsockopt( SO_SNDBUF , ...


Un conseil, évite le sizeof(buffer) et utilise plutôt VALEUR, car sizeof(buffer) peut prendre la taille du pointeur si la déclaration du tableau n'est pas dans le scope de l'appel au sizeof.

@++