Send et recv

StayCrunchy Messages postés 43 Date d'inscription mercredi 24 novembre 2010 Statut Membre Dernière intervention 26 février 2014 - 12 mai 2011 à 00:21
cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 - 12 mai 2011 à 07:56
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

cs_Lucky92 Messages postés 180 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 16 août 2012 2
12 mai 2011 à 07:56
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.

@++
0
Rejoignez-nous