begin process at 2012 05 30 10:21:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[C] Transfert de fichier par sockets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[C] Transfert de fichier par sockets

mercredi 29 octobre 2003 à 18:26:42 | [C] Transfert de fichier par sockets

bonobo78

salut !

j'ai un petit pb pour transmettre un fichier via des sockets.
En fait, je decoupe le fichier en petit bout de 1024 octets et je transmets chaque bout par la socket. Mais comment s'arreter à la fin du fichier. Car ici, le dernier bout qui ne fait pas 1024 octets, contient la fin du fichier plus la fin du buffer du while précédant.



FILE * File;
char *message;
int msg = ACK;
int taille = 1024;

File = fopen(path,"r");
message = (char*)malloc(1024);

while((!feof(File))){

fread(message,1024,1,File);
if(write(sock,message,1024) == -1){
perror("EnvoieFichier2");
exit(2);
}
}

free(message);
fclose(File);
msg = FINFICHIER;
printf("Fin de fichier\n");
if(write(sock, &msg, sizeof(msg)) == -1){
perror("FinEnvoi");
exit(2);
}




mercredi 29 octobre 2003 à 18:31:58 | Re : [C] Transfert de fichier par sockets

Anacr0x

tu sauvegarde la valeur de retour de fread et tu remplace ton 1024 avec

size_t n = fread(message,1024,1,File);
if(write(sock,message,n) == -1){

ca devré etre bon
mercredi 29 octobre 2003 à 18:57:31 | Re : [C] Transfert de fichier par sockets

bonobo78


fread renvoie 0 ou 1 en fonction si il arrive a lire ou pas la taille (1024).

et ca m'oblige d'envoyer la taille au client ! c embettant :(
mercredi 29 octobre 2003 à 19:02:46 | Re : [C] Transfert de fichier par sockets

Anacr0x

"fread returns the number of full items actually read"
donc pas 0 ou 1

En fait, tu t'es trompé dans l'ordre des param :
ce n'est pas : fread(message,1024,1,File);
mais : fread(message,1,1024,File);

et la ca te renvéra le bon nombre
mercredi 29 octobre 2003 à 19:08:04 | Re : [C] Transfert de fichier par sockets

Anacr0x

"et ca m'oblige d'envoyer la taille au client ! c embettant :( "
-> de tte facon, je crois que tu est obligé d'envoyer la taille totale du fichier

parceque quand il recevra les données, il fera ca dans une boucle while, mais cette boucle ne peut pas savoir quand s'arété sauf si tu lui a passé d'abord la taille du fichier qu'elle comparera avec ce qu'elle a reçu

ou alors il y a une autre technique que je ne connais pas
mercredi 29 octobre 2003 à 19:13:39 | Re : [C] Transfert de fichier par sockets

aardman

Membre Club
Salut,
Si tu recois un buffer qui contient moins de 1024 octets tu peut interpreter ca comme la fin du fichier et sortir de ta boucle. Mais bon je pense aussi qu'envoyer la taille du fichier est le plus sur.
mercredi 29 octobre 2003 à 19:16:24 | Re : [C] Transfert de fichier par sockets

Anacr0x

ah oui tien, j'avais pas pensé a ça, mais en imaginant qu'il y a un petit pb de connection ou de ralentissement, il ne recevra pas le packet en entier et pfiou ! le fichier sera foutu.
Comme tu le dit, je pense aussi qu'envoyer la taile est plus sur
mercredi 29 octobre 2003 à 19:21:08 | Re : [C] Transfert de fichier par sockets

Anacr0x

au fait, puisqu'on est en plin dans les socket, j'en profite pour te demandé un petit conseil aardman, toi qui t'y connais très bien sur ce sujet :

quand on envoyer plusieur petit paquet rapidemment, le serveur peut les "recoller", et ca, de tps en tps, ca m'embète un peu puisque je fait un strncmp() sur le début de la chaine
Y a-t-il un moyen d'empécher ce regroupement ?
mercredi 29 octobre 2003 à 19:23:12 | Re : [C] Transfert de fichier par sockets

bonobo78


comment on fait un printf d'un size_t ?
mercredi 29 octobre 2003 à 19:26:10 | Re : [C] Transfert de fichier par sockets

Anacr0x

un size_t c 'est à peu de chose près comme un int, donc tu fait un %d (met un cast si le compilo n'aime pas ca)

1 2

Cette discussion est classée dans : fichier, fin, message, file, msg


Répondre à ce message

Sujets en rapport avec ce message

Envoi de fichier non complet [ par trafounet ] bonjour à tous,je cherche à envoyer un fichier par socket et ca marche pour les fichiers de petite taille (quelques ko) mais malheuresement dès que le cherchet afficher un ou plusieurs ligne d'une fichier texte . [ par brell ] bon jour! cette fonction a comme parametre fichier contenant les messages et une chaine de caracteres contenant le destinateur. cette fonction permet chargement d'une liste chainée à partir d'un fichier binaire qui contient des structures [ par achmer ] bonjours à tous... j'ai un petit problème au niveau de la récupération des structures (patient) enregistrées dans un fichier bonaire ,pour les charge Impossible d'écrire dans un fichier [ par snpier wolf ] Bonjours à vous, Je suis entrain de créer un Logeur, il fonctionne pour loguer un message dans une Message Box dans une console mais pas dans un fichi Ouvrir le nom d'un fichier dans une chaîne de caractères [ par noname001 ] Bonjour à tous, J'ai un soucis dans le développement d'un programme. En effet, j'ouvre tout d'abord un fichier.txt qui contient toute une liste de no (win32)Fichier et buffer en lecture seule [ par mogwai93 ] Bonjour Je voudrais lire un fichier, placer le contenu de ce fichier dans un buffer et modifier ce buffer (mais pas le fichier). J'arrive bien à ou Problème de sauvegarde de fichiers en gtk [ par tony952 ] Bonjour j'ai un soucis pour la sauvegarde de fichiers en GTK. Lorsque j'ouvre le fichier que j'ai enregistré, le programme m'affiche des symboles inco Comment trouver la fin d'un fichier avec fonctions windows [ par dante20007 ] Bonjour, je voudrais détecter la fin de mon fichier en termes de caractères.J'ai essayé avec la fonction (feof) mais elle ne me donne pas mon dernier files de messages [ par spark01 ] Bonjours Je voudrai savoir si la taille d'une file de message est fixe ou dynami charger le contenu d'un QtextEdit dans un fichier [ par naddoush ] salut tout le monde, dans mon application j'ai un QtextEdit et un bouton save à coté.je voudrais bien qu'on ecrivant quelques lignes dans ce Qtextedit


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales