Broken pipe et sockets

nono1307 Messages postés 3 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 18 novembre 2004 - 16 nov. 2004 à 23:00
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 18 nov. 2004 à 18:29
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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 nov. 2004 à 13:00
non en fait ton image doit être en hexa...
0
nono1307 Messages postés 3 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 18 novembre 2004
18 nov. 2004 à 09:20
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...
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 nov. 2004 à 18:29
pas binaire hexadécimale... pas base 2 base 16...
0
Rejoignez-nous