Probleme seeveur client

Signaler
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006
-
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
-
je voudrai avec ce serveur client transferer des
jpeg mais sa ne marche pas et je ne comprend pas pourquoi,Pouvez vous
m'aider svp, voici ce que j'ai fais:




/* serveur transfert de fichiers */











#include <sys/types.h>


#include <sys/socket.h>


#include <netinet/in.h>


#include <signal.h>


#include <stdio.h>


#include <string.h>


#include


#include <stdlib.h>


#include <time.h>





int connexion;


int etat;





void fin(){


close(connexion);


printf("fin du processus serveur!\n");


exit(0);


}





int main()


{


int taille,lecture;


struct sockaddr_in sock;


struct sockaddr_in sockclient;


char tampon[100];


int service;


FILE *fp;


int i;


char fich[500];





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(2255);





if(bind(connexion,(struct sockaddr*)&sock,sizeof sock)==-1)


{


perror("erreur bind");


exit(1);


}





listen(connexion,5);


signal(SIGINT,fin);





while(1)


{


taille=sizeof(sockclient);


puts("attente de connexion");


if((service=accept(connexion,(struct sockaddr*)&sockclient,(socklen_t *)taille))==-1)


{


perror("erreur accept");


exit(1);


}


puts("Serveur:connexion établie");


if(fork()==0)


{


lecture=read(service,tampon,100);


if(lecture==0)


{


close(service);


puts("socket fermée par client");


exit(1);


}


if(lecture<0)


{


puts("erreur lecture");


exit(1);


}


tampon[lecture]=0x00;


printf("Nom du fichier demandé: %s\n",tampon);


if((fp=fopen(tampon,"r"))==NULL)


{puts("Erreur sur le nom du fichier");


strcpy(tampon,"NOTFIND");


write(service, tampon, strlen(tampon));


close(service);


exit(1);


}


strcpy(tampon,"FIND");


write(service, tampon, strlen(tampon));


sleep(1);


while((i=fread(fich, sizeof(char),500,fp))>0){


fich[i]= 0; printf("%s\n",fich);





write(service,fich,i);


}


fclose(fp);


close(service);


exit(0);


} /* Fin du Fils */


close(service);


puts("père:socket service fermée");


}


}





/* client transfert fichiers */











#include <sys/types.h>


#include <sys/socket.h>


#include <linux/if_packet.h>


#include <linux/if_ether.h>


#include <string.h>


#include


#include <netinet/in.h>


#include <stdio.h>


#include <signal.h>


#include <stdlib.h>


#include





int main(int argc, char *argv[])


{


struct sockaddr_in addr;


/*struct sockaddr_in *local;*/


int connexion, longueur;


char envoie[100];


char recu[100];


int n;


FILE *fich3 ;





/*Obtention du descripteur de socket */


if(argc!=2)


{


printf("attention mal taper\n");


exit(0);


}


if((connexion=socket(AF_INET,SOCK_STREAM,0))==-1)


{


perror("erreur socket");


exit(1);


}





addr.sin_family=AF_INET;





addr.sin_addr.s_addr=inet_addr(argv[1]);





addr.sin_port=htons(2255);


longueur = sizeof(addr);





if(connect(connexion,(struct sockaddr *)&addr,longueur)==-1)


{


perror("erreur socket");


close(connexion);


exit(2);


}


printf("Tapez le nom du fichier demandé! :");


scanf("%s",envoie);


write(connexion,envoie,strlen(envoie));


printf(" Envoyé : %s\n",envoie);


n=read(connexion,recu,100);


recu[n]=0;


printf("Reponse du serveur : %s\n",recu);


if (strcmp(recu,"PASTROUVE")==0)


{printf("Fichier inconnu\n");


close(connexion);


exit(0);


}


if ( (fich3 fopen (recu, "w")) NULL)


{


perror("erreur ouverture fichier destnation");


exit(0) ;


}





while ( (n=read(connexion, recu, 100)) >0)





{ recu[n] = 0 ;


printf("%s\n",recu);


fwrite(recu, sizeof(char),n,fich3);


}


fclose(fich3);


close(connexion);





return 0;





}

4 réponses

Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Salut, tu aurais pu dire ce qui ne marche pas, la connexion, l'envoi, la réception, les threads ???? ....

coté serveur y a un ptit pb dans l'envoi
fich[i]= 0; printf("%s\n",fich);
write(service,fich,i);
si tu change les valeurs de ce que tu envoie, c'est sur que ça ne marchera pas

coté client, à la réception idem
recu[n] = 0 ;
printf("%s\n",recu);
fwrite(recu, sizeof(char),n,fich3);
recu[n]=0 est a virer (en plus tu le fais deja coté serveur)

Vire du coup les 2 printf

KeniiyK
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

quand je conecte le client au serveur, le serveur ce deconecte et me di :
" erreur accept : Bad adress "
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Je viens de modifier pour compiler sous windows avec VC++6 et la connexion marche.

KeniiyK
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Le accept() prend en argument la taille de l'adresse du client, cette
variable ne doit être un int que sous windoz. Ailleurs c'est une
structure socklen_t. Il faut aussi modifier le accept() en conséquence.