J'essaie d'envoyer un fichier à un socket particulier en utilisant C; voici le code:Envoyer un fichier à un socket
int send_file(char *filepath,int sock)
{
FILE *fp=fopen(filepath,"rb");
void *buff=malloc(2000);
int i=1;
while(i)
{
int bytes_read=fread(buff,1,2000,fp);
i=!(feof(fp));
int bytes_sent=0;
while(bytes_sent<bytes_read)
{
int n=send(sock,buff+bytes_sent,bytes_read-bytes_sent,0);
if(n==-1)
return -1; //failure
bytes_sent+=n;
}
}
fclose(fp);
free(buff);
return 0;
}
Quand je lance ce programme et essayer de voir le fichier texte dans Firefox à http://127.0.0.1:8080/, une partie du fichier est coupé de la fin si la taille du fichier est de plus de 2000 octets. Si j'envoie une photo, seulement les 3/4 de l'image sont chargés (coupés par le bas).
La fonction renvoie toujours 0 à l'appelant. Où le dernier bloc d'octets qu'il envoie() disparaît-il? Dois-je vider un flux avant de revenir?
Merci
EDIT: Ce est un extrait de ma fonction principale():
send_file(filepath, sock);
close(sock);
return 0;
}
Êtes-vous sûr que le chemin « échec » ne se produit pas ? Vous devriez imprimer un message d'erreur à l'erreur standard à ce point, plutôt que de simplement retourner -1. –
Oui, j'ai vérifié la valeur qu'il retourne à main, et c'est toujours 0. – io555782
Pouvez-vous compiler le code avec les avertissements maximum et afficher les avertissements? Avez-vous inclus stdio.h, stdlib.h et sys/socket.h? –