bonjour,
j'ai effectué un serveur client qui permet de transferer des image jpg, dans mon cas je doit saisir le nom de l'image ( par exemple : image_voiture ) pour que le client la recoive, mais j'aimerai recevoir cette image automatiquement, c'est a dir que qquand le client ce connecte au serveur, je voudrai recevoir cette image,donc si quelqu'un pourrait m'aider ca serait sympa de votre part, voici mon code :
/*SERVEUR TRANSFERT IMAGE */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
int connexion;
/* Fonction activée par la touche Ctrl c , signal SIGINT*/
void fin()
{close(connexion);
printf("fin du processus serveur!\n");
exit(0);
}
int main()
{
int taille,lecture,N;
struct sockaddr_in sock;
struct sockaddr_in sockclient ;
char tampon[100], NomFich[100];
int connexion_service;
FILE *fich ;
signal(SIGINT,fin) ;
/* descripteur de socket */
if ( (connexion = socket(AF_INET,SOCK_STREAM,0) )== -1)
{ perror("erreur socket");
exit(1);
}
sock.sin_family = AF_INET;
sock.sin_addr.s_addr = INADDR_ANY;
sock.sin_port = htons(5000);
if ( bind(connexion,(struct sockaddr *)&sock, sizeof sock ) == -1)
{ perror("erreur bind");
exit(1);
}
/* accepte les demandes de connexion */
listen(connexion,5);
signal(SIGINT,fin);
while(1)
{
taille = sizeof ( sockclient );
puts("attente de connexion");
if ((connexion_service = accept(connexion,(struct sockaddr *)&sockclient,(socklen_t *)&taille) )==-1)
{ perror("erreur accept");
exit(1);
}
puts("Serveur : connexion etablie");
if (fork()==0)
{ /* programme fils */
lecture = read(connexion_service,NomFich,100);
if(lecture == 0) /* retourne 0 si le client exécute close */
{ close(connexion_service);
puts("socket fermee par client");
exit(1); /* le fils se termine*/
}
if (lecture < 0)
{ perror("erreur lecture");
exit(1);
}
tampon[lecture] = 0x00;
printf("Donnees client : %s\n",NomFich);
if ( (fich = fopen(NomFich,"rb") ) != NULL)
{
strcpy(tampon,"OK") ;
write(connexion_service,tampon,strlen(tampon));
sleep(1) ;
while ( (N = fread(tampon, sizeof( char), 100, fich) ) != 0)
write(connexion_service,tampon,N);
fclose(fich) ;
close(connexion_service) ;
}
else { strcpy(tampon,"NOTOK") ;
write(connexion_service,tampon,strlen(tampon));
close(connexion_service) ;
}
exit(0) ;
} /* fin du programme fils */
close(connexion_service);
puts("pere : socket service fermee");
}
}
____________________________________________________________________
/*CLIENT TRANSFERT IMAGE */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
int connexion , n ;
int longueur ;
struct sockaddr_in addr;
char recu[100] , NomFich[50];
FILE *fich ;
/* Obtention du descripteur de socket */
connexion = socket ( AF_INET, SOCK_STREAM , 0 );
if ( connexion ==-1 )
{ perror ("erreur création socket");
exit(1);}
/* Remplissage de la structure addr */
addr.sin_family = AF_INET ;
addr.sin_port = htons (5000) ;
addr.sin_addr.s_addr = inet_addr("192.168.0.6") ;
longueur = sizeof(addr) ;
/* Tentative de connexion */
if ( connect ( connexion , (struct sockaddr *)&addr , longueur) == -1 )
{perror ("erreur de connexion") ;
close(connexion) ;
exit(1);
}
/* Suite à compléter : transfert de données avec le serveur */
/*Saisie du nom du fichier à demander*/
printf("Taper le nom du fichier demande : \n");
gets(NomFich) ;
write(connexion, NomFich, strlen(NomFich)+1 );
printf("demande envoye\n");
n = read(connexion, recu, 100) ;
recu[n] = 0 ;
printf("Recu : %s\n", recu) ;
if ( strcmp("NOTOK", recu) == 0)
{ printf("Fichier non trouve\n");
close(connexion) ;
exit(0) ;
}
/*Réception du fichier demandé*/
if ( strcmp("OK", recu) == 0)
{
if ( (fich = fopen("cpy_image","wb+")) != NULL)
{
while ( (n=read(connexion, recu, 100) ) > 0)
{
fwrite(recu, sizeof(char), n, fich);
recu[n] = 0 ;
}
fclose(fich) ;
}
else printf("erreur fichier") ;
}
close(connexion) ;
return 0 ;
}