Broken pipe et sockets

Signaler
Messages postés
3
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
18 novembre 2004
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
J'ai un petit problème :(

Je dois faire un serveur HTTP en C avec les sockets. Ce serveur doit gérer l'envoie des images. Or, c'est à ce niveau qu'est le problème.

Voici le bout de code :

# if (((path[j-1]=='g')&&(path[j-2]=='e')&&(path[j-3]=='p')&&(path[j-4]=='j'))||((path[j-1]=='g')&&(path[j-2]=='p')&&(path[j-3]=='j'))||((path[j-1]=='f')&&(path[j-2]=='i')&&(path[j-3]=='g'))) {
#
# /* l'extension du fichier est jpeg*/
# /* le fichier est donc une image => Envoi entete HTTP pour une image */
# write(newsd,bufimage,sizeof(bufimage));
# //write(1,bufimage,sizeof(bufimage));
#
#
# /* allocation d'une zone de mémoire de 1 Mo pour stocker l'image à envoyer */
# char* image=(char*)malloc(1048576*sizeof(char*));
# n=0;
#
# while(!feof(fichier)) {
# image[n]=fgetc(fichier);
# n++;
# }
# /* on a chargé dans "image" l'image à envoyer */
# /* de plus, sa taille est n-1 octets */
#
#
# /**********************************************************************************************/
# if ((fichier2=fopen("./caisse.jpeg", "w+a" ))!= NULL) {
# printf( "fichier2 cree .....\n" );
# }
#
# for(k=0;k<n;k++) {
# fprintf(fichier2,"%c",image[k]);
# }
# fclose(fichier2);
# /* cela prouve bien qu'on a tout chargé dans "image", on crée un fichier qui contient bien l'image à envoyer */
# /* ici ca marche, je récupère bien l'image*/
# /***********************************************************************************************/
#
# /* problème au niveau du write !!!!!!!!! */
# write(newsd, image,n-1); // pb ici
# //write(1,image,500); // par contre ici j'ai les 500 premiers caractères de image qui s'affichent bien
# fclose(fichier);
# free(image);
# }

Voici l'en-tête HTTP que j'envoie pour l'image :
# char bufimage[]="HTTP/1.1 200 OK\nContent-Type: image/jpeg\n\
# \n";

Pour info, path contient le nom du fichier à envoyer ( ce qu'il y a apres le GET ...)

J'arrive bien à ouvrir l'image, la lire et la stocker dans "image".
Le problème vient au moment du "write(newsd, image,n-1);" : ca me met un broken pipe. Par contre quand je fais "write(1,image,500);", il y a les 500 premiers caractères contenus dans "image" qui s'affichent !!
Qu'est ce qui ne vas pas avec write ? Peut etre que l'image est trop grosse ? ( elle fait en gros 65 ko) Mon en-tête HTTP n'est pas correct ?

Je vous remercie d'avance

3 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
non en fait ton image doit être en hexa...
Messages postés
3
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
18 novembre 2004

alors faut il convertir l'image en binaire ?

Mais vu que j'envoie l'entete http pour gérer les images, le client sait qu'il va recevoir une image et donc va s'adapter...
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
pas binaire hexadécimale... pas base 2 base 16...