begin process at 2012 05 29 22:00:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

probleme seeveur client


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme seeveur client

mardi 7 février 2006 à 21:51:18 | probleme seeveur client

doberman7578

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 <unistd.h>
#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 <unistd.h>
#include <netinet/in.h>
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <arpa/inet.h>

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;

}
mercredi 8 février 2006 à 09:40:05 | Re : probleme seeveur client

KeniiyK

Membre Club

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

mercredi 8 février 2006 à 10:39:19 | Re : probleme seeveur client

doberman7578

quand je conecte le client au serveur, le serveur ce deconecte et me di :
" erreur accept : Bad adress "
mercredi 8 février 2006 à 12:07:41 | Re : probleme seeveur client

KeniiyK

Membre Club

Je viens de modifier pour compiler sous windows avec VC++6 et la connexion marche.

KeniiyK

mercredi 8 février 2006 à 13:19:19 | Re : probleme seeveur client

katsankat

Membre Club
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.



Cette discussion est classée dans : connexion, service, include, exit, tampon


Répondre à ce message

Sujets en rapport avec ce message

client sur c++builder [ par doberman7578 ] Bonjour, Voila j'ai effectué un Serveur en C sur linux et je voudrais dans un premier tps savoir si je peut effectuer un transfert de fichier [ par doberman7578 ] 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_ Problème création de service sous Visual Studio 2005 (avec GetFilesAttributesA) [ par AmStErDaMnEd ] Bonjour, Je suis débutant en C++. Je dois créer un service tournant sur Windows XP pour mon entreprise. J'ai préalablement programmé mon outil en C++ Connexion base SQL [ par sarcipus ] Bonjour, j'essaie tjs de réaliser un programme en C++ qui va interroger une base SQL. J'essaie de reprendre ligne par ligne un exemple d'internet afin creation d'un proxy [ par krusty24 ] je doit creer un proxy :    de notre coté on se connecte actif    le serveur fonctionne en passifj'ai essayer de faire un proxy en C et je me trouve e probleme d'authentification [ par neofenix ] bonjour a tous et oui c'est encore moi ^^voila je crée un programme qui permet de creer un compte sur un serveur mysql et l'utilisateur peut ensuite s problème de connexion à une base de données dans C [ par boualiasma ] Salut,1)- Je voudrais connecter à une base des données crée sous Mysql  de version 5.1.30le dossier d'installation est : C:\Program Files\EasyPHP 3.0\ Demande d'aide c++ et requête SQL [ par juliette666 ] Bonsoir a tous pour commencer j'utilise visual studio 2010 (c++ console) et pour ma BD c'est MySQL. j'ai Connexion.h,Connexion.cpp et main.cpp voila Services windows [ par mohdaef ] Bonjour J'ai écrit un premier petit service pour Windows afin de comprendre le fonctionnement. J'ai une attente de connexion de socket sur port, lor les arguments de la comande [ par boujerra ] bonjour a tous ma question concernant les arguments passer à la fontion main le code source: #include #include #include int main(int argc,char *argv[]


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,660 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales