joe_la_mousse
Messages postés4Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention30 septembre 2005
-
24 sept. 2005 à 00:10
SpidersX -
10 oct. 2005 à 12:12
J'espere bien que vous pourrez m'aider...
Je dois coder une application client serveur (avec un gteway au milieu) afin de transferer un fichier.
Pur l'instant tout se passe bien (les messages passe bien du client au
gateway et du gateway au serveur) mais j'aurais aimer savoir comment on
decoupe un fichier en petit block avant de les envoyer...
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008 24 sept. 2005 à 10:59
ah non brunews 100 ko c'est beaucoup trop, j'ai fais pas mal de test de
debit en fonction de la taille du paquet, et c'est a 1ko que la
connection est la plus stable et le debit meilleur (il reste tjs a la
vitesse max de ma ligne qui est de 93 Ko/s). Et puis 100 Ko pour faire
une barre d'avancement, ça va pas se raffraichir souvent sur une petite
connection avec 16 ko/s d'upload.
Voila ! donc pour decouper un fichier voila comment ça marche.
int len;
char Buffer[1001];
//Etablir la connection
FILE* FichR=fopen("MonfichierALire","rb");
if(FichR==NULL)
{
printf("L'ouverture du fichier d'entrée a ratée\n");
return 0;
}
fseek(Fich,0,SEEK_END);
FileSize=ftell(Fich);
fseek(Fich,0,SEEK_SET);
while(!feof(FichR))
{
len=fread(Buffer,1,1000,FichR);
send(sock,Buffer,len,0);
//Calcul de vitesse enfin tout que tu veux (avec la taille récupéree plus haut)
}
fclose(FichR);
//Fermeture de la connection
Voila, je ne pense pas avoir fais d'erreur, tiens nous au courant
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 24 sept. 2005 à 10:47
C'est obligatoire de découper ?
Va bon sans découpe, aspire par passe de 100 Ko (par exemple) dans un buffer et envoie ce bloc, tu boucles ainsi tant qu'il reste des octets.
ciao...
BruNews, MVP VC++
Vous n’avez pas trouvé la réponse que vous recherchez ?
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 24 sept. 2005 à 22:05
Envoyé des paquets de 1ko ???
Niveau optimisations j'ai vu mieux.
Tu as fait des test de débit et pour toi 1ko va bon... A mon avis t'as pas du faire les bons test.
Les sockets transmette au maximum des paquets de 8Ko.
En envoyant des paquets de 1Ko, tu va bouffer de la bande passante inutillement.
Les paquets contiennent des entetes, plus tu réduira la taille des paquets, plus tu auras d'entete a tranférer.
Procède par bloc de 8Ko, et envoie ca tel quel, tu sera au maximum des performances autorisées par les socket, et ceci quel que soit la connexion utilisé.
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008 24 sept. 2005 à 22:41
la j'ai du mal, j'ai testé pas
mal de taille de paquet, et le 1 était le meilleur ceci dit je suis
jamais monté a plus de 3 Ko (vus que ça aillait en se dégrandant). Je
vais tester 8 Ko
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 25 sept. 2005 à 01:36
Salut,
8ko c'est la taille des buffers d'un socket par defaut, pas la taille maxi d'un paquet.
La taille d'une trame n'est pas vraiment limitée, mais il vaut mieux la
choisir de facon a eviter la fragmentation des trames au niveau ip. Par
exemple, emule utilise des trames 1400 octets.
Quant a l'udp pour transferer un fichier, c'est une mauvaise idée il n'est pas du tout fait pour ca.
Imagine la freebox de BruNews qui upload sur un 56k en province, ben tu
va etre decu quand tu va voir le pourcentages de paquets correctements
recus.
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 août 2008 25 sept. 2005 à 01:45
oui l'udp n'est pas vraiment une solution. Et je ne veux pas d'une
solution trop complexe a mettre en place, si je dois verifier l'ordre
des paquets et tout c'est un peu le bordel