Decouper un fichier avant le transfert via un socket

Résolu
joe_la_mousse Messages postés 4 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 30 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...



Je debute...



Merci d'avance

25 réponses

MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 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
3
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
24 sept. 2005 à 00:52
tu utilises quoi pour ouvrir le fichier ? api window ? C ? C++ ?
0
joe_la_mousse Messages postés 4 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 30 septembre 2005
24 sept. 2005 à 07:19
J'utilise le langage c avec un compilateur gcc sous unix.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 sept. 2005 à 11:06
j'ai bien dit 'par exemple', bien sur depend du matos en place, 130 Ko/s upload avec Freebox sur Paris donc...

ciao...
BruNews, MVP VC++
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
24 sept. 2005 à 11:13
;-) quelle chance, j'habite (a 40 km au nord de perpignan) exactement a
l'oposé et j'ai une v3 donc, tjs limité a 93 Ko/s enfin bon deja ça...
0
joe_la_mousse Messages postés 4 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 30 septembre 2005
24 sept. 2005 à 12:29
Merci d'avance, vraiment je suis epater de l'aide recu sur le site...



Je testerais tout en revenant de weekend, alors amusez vous bien parce que moi je part pour Boston



@ +
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 sept. 2005 à 12:40
Peut-être on se croise en vol, moi c'est départ Seattle demain midi pour la semaine.

ciao...
BruNews, MVP VC++
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
24 sept. 2005 à 13:08
rrr, moi c'est lycée toute la journée ...
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
24 sept. 2005 à 13:36
euh valide une reponse pour dire que c'est bon, si tu as un prob, je te répondrais
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
24 sept. 2005 à 17:42
Ptete tu va croisé Rita en vol aussi BruNews :)

Mais bon j'veux pas t'inquiété ;)
if(!Meilleur("Joky")) return ERREUR;<
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
24 sept. 2005 à 17:46
Mais eux c'est quoi tout ces voyageurs !!!

j'en ais marre j'ai plus de 1200* le meme moi ! Maison --> lycée en bus

bon j'arrete de me plaindre, question, vous allez faire quoi au USA ?
démarchage ? dans ce cas la pourquoi pas le japon ? la chine ?



L'inocent mùpùf ...
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
24 sept. 2005 à 17:51
Rita c'est juste un ouragan hein lol :)

Et on voyage pas tous :)

Moi aussi vais à la fac tous les jours :)



En même temps, pourquoi voyager ? on a pas le plus beau pays du monde ? :p
if(!Meilleur("Joky")) return ERREUR;
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 sept. 2005 à 18:56
On est bien d'accord Joky, aucun doute là dessus.
http://mvp.support.microsoft.com/gp/MVPSMT2005

ciao...
BruNews, MVP VC++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Derniè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é.

Shell
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 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
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
24 sept. 2005 à 22:44
Oulala oui, c'est pas mal 8, le debit est plus stable, (je passait de
88 a 100 Ko/s) now je suis tjs entre 91 et 94 ko/s, merci, DeathCrash
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
24 sept. 2005 à 23:21
No soucis,

Si tu veux encore plus optimisé le transfert passe en UDP.
Le TCP, control tout les paquets et transmet des entetes bien plus grosse que l'UDP.

Le seul incovénient avec l'UDP, c'est que tu n'as aucune garantie sur le bon transfert des fichiers.

Pour y palier tu peux utiliser un checksum en fin de trame, c'est ce que font la plupart des soft de transfert de data.

Shell
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
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.
0
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 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
0
Rejoignez-nous