begin process at 2012 05 28 13:15:48
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Réseau & Internet

 > 

application client/serveur


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

application client/serveur

dimanche 20 juin 2010 à 16:42:05 | application client/serveur

tknmb1

salut tout le monde,
voila j'ai essayé de tester une simple application client/serveur (envoyer et recevoir un message) sur deux ordinateurs personnels, malgres que le code source est bien correcte j'arrive toujours pas a me connecter, par exemple si je lance l'application serveur sur une machine d'adresse ip 192.168.1.2 port 123 et puis je lance le client en lui donnant la meme adresse il me renvoie le message "could not connect to server", est ce que j'ai besoin d'un veritable serveur pour que l'application marche????
voila le code source du serveur:

#include <stdio.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
int simpleport=0;
int simplesocket=0;
int returnstatus;
int simplechildsocket;
struct sockaddr_in simpleserver;
char buffer[256]="";
if(argc!=2)
{
fprintf(stderr,"usage: %s <port number>\n",argv[0]);
exit(1);
}
/*create the socket*/
simplesocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(simplesocket<0)
{
fprintf(stderr,"socket not created!\n");
exit(1);
}
else
fprintf(stderr,"socket created successfully\n");
memset(&simpleserver,0,sizeof(simpleserver));
simpleport=atoi(argv[1]);
//create simpleserver
simpleserver.sin_family=AF_INET;
simpleserver.sin_addr.s_addr=htonl(INADDR_ANY);
simpleserver.sin_port=htons(simpleport);
//the binding process
returnstatus=bind(simplesocket,(struct sockaddr*)&simpleserver,sizeof(simpleserver));
if(!returnstatus)
fprintf(stderr,"bind completed!\n");
else
{
fprintf(stderr,"could not bind to socket!\n");
close(simplesocket);
exit(1);
}
fprintf(stderr,"%s\n",(char *)inet_ntoa(simpleserver.sin_addr));
//listen on socket
returnstatus=listen(simplesocket,5);
if(returnstatus)
{
fprintf(stderr,"could not listen on socket\n");
close(simplesocket);
exit(1);
}
else
fprintf(stderr,"listening on socket!\n");
while(1)
{
struct sockaddr_in simpleclient= {0};
int clientnamelength=sizeof(simpleclient);
simplechildsocket=accept(simplesocket,(struct sockaddr *)&simpleclient,&clientnamelength);
if(simplechildsocket<0)
{
fprintf(stderr,"could not accept connections!\n");
close(simplechildsocket);
exit(1);
}
else
fprintf(stderr,"connection established!\n");
char clientname[20];
if(inet_ntop(AF_INET,&simpleclient.sin_addr.s_addr,clientname,sizeof(clientname))!=NULL)
fprintf(stderr,"handling client %s %d\n",clientname,ntohs(simpleclient.sin_port));
else
{
fprintf(stderr,"could not receive client adress!\n");
close(simplechildsocket);
exit(1);
}
returnstatus=recv(simplechildsocket,buffer,255,0);
if(returnstatus<0)
{
fprintf(stderr,"recv() failed!");
close(simplechildsocket);
exit(1);
}
int totalbytesent=0;
while(returnstatus>0)
{
totalbytesent=send(simplechildsocket,buffer,returnstatus,0);
if(totalbytesent<0)
{
fprintf(stderr,"send() failed");
close(simplechildsocket);
exit(1);
}
else if(totalbytesent!=returnstatus)
{
fprintf(stderr,"sent unexpectd number of bytes!\n");
close(simplechildsocket);
exit(1);
}
returnstatus=recv(simplechildsocket,buffer,255,0);
if(returnstatus<0)
{
fprintf(stderr,"revc() failed\n");
close(simplechildsocket);
exit(1);
}
}
close(simplechildsocket);
}
close(simplesocket);
return 0;
}

celle du client:


#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
int main(int argc,char *argv[])
{
int simplesocket;
int returnstatus;
int portnumber;
char *buffer, *servip;
struct sockaddr_in simpleserver;
size_t addr_len;
if(argc!=4)
{
fprintf(stderr,"usage : %s <server adress> <echo word> <server port>\n",argv[0]);
exit(1);
}
buffer=(char*)malloc(strlen(argv[2])*sizeof(char));
if(!buffer)
{
fprintf(stderr,"no free memory space!\n");
exit(1);
}
simplesocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(simplesocket<0)
{
fprintf(stderr,"could not create socket!\n");
exit(1);
}
else
fprintf(stderr,"socket created successfully!\n");
memset(&simpleserver,0,sizeof(simpleserver));
portnumber=atoi (argv[3]);
simpleserver.sin_port=htons(portnumber);
servip=argv[1];
returnstatus=inet_pton(AF_INET,servip,&simpleserver.sin_addr.s_addr);
if(returnstatus==0)
{
fprintf(stderr,"inet_pton()failed,invalid IP adress!\n");
close(simplesocket);
exit(1);
}
else
if(returnstatus<0)
{
fprintf(stderr,"inet_pton()failed");
close(simplesocket);
exit(1);
}
simpleserver.sin_family=AF_INET;
returnstatus=connect(simplesocket,(struct sockaddr*)&simpleserver,sizeof(simpleserver));
if(returnstatus<0)
{
fprintf(stderr,"could not connect to server!\n");
close (simplesocket);
exit(1);
}
else
fprintf(stderr,"connect successfully!\n");
strcpy(buffer,argv[2]);
returnstatus=send(simplesocket,buffer,strlen(buffer),0);
if(returnstatus<0)
{
fprintf(stderr,"send() failed");
close(simplesocket);
exit(1);
}
else if(returnstatus!=strlen(buffer))
{
fprintf(stderr,"send(), sent unexpected number of bytes");
close(simplesocket);
exit(1);
}
int totalbytesreceived=0;
int echostrlen=sizeof(buffer);
strcpy(buffer,"");
while(totalbytesreceived<echostrlen)
{
returnstatus=recv(simplesocket,buffer,255,0);
if(returnstatus<0)
{
fprintf(stderr,"recv()failed");
close(simplesocket);
exit(1);
}
else if(returnstatus==0)
{
fprintf(stderr,"connection closed prematurely");
close(simplesocket);
exit(1);
}
totalbytesreceived+=returnstatus;
buffer[returnstatus]='\0';
fputs(buffer,stdout);
}
fputc('\n',stdout);
fprintf(stderr,"ok");
close(simplesocket);
return 0;
}


dimanche 20 juin 2010 à 17:10:47 | Re : application client/serveur

Arnotic

Administrateur CodeS-SourceS
Je n'ai pas pris le temps de regarder le code. Cependant es-tu sûr que le port 123 et ouvert sur le firewall de ton pc ?


@+
Arnotic,
Admin CS
dimanche 20 juin 2010 à 17:37:25 | Re : application client/serveur

tknmb1

je travaille sur un environnement linux,je n'ai aucun firewall, en+ dans l'application serveur j'ai deja ouvert le port spécifié, une petite remarque quand je fais un ping sur l'adresse ip de la machine ou est installé le programme serveur, tous les paquets n'arrivent pas, cependant quand je teste l'application sur une meme machine (les deux applications client et serveur)le programme fonctionne convenablement!!!
merci d'avance


Cette discussion est classée dans : buffer, include, fprintf, simplesocket, returnstatus


Répondre à ce message

Sujets en rapport avec ce message

Pb vector de vector de char ! [ par nicolas66 ] Ben g un pti pb avec ce prog en Cpp, à la compile ca passe mé à l'execution ca plante !! si vous savé pk merci d'avance !(c censé initialisé un buffer strcat enfin pas tout a fait mais presque [ par yserver ] bonjours tout le monde et merci de lir mon poste merci pour toutes vos reponseEn fait le titres est pas tout a fait bon mais c'etait plsu cours le pb client serveur [ par elanspeech ] Bonjour,Je suis en train de programmer un petit client serveur en C pour windows avec dev-c++. J'obtiens l'erreur suivante a la compilation : D:\DEV-C Blème compil raccourci [ par algori ] Bonjour,J'ai chopé un code pour faire des raccourcis, je l'ai un peu modifié et j'ai essayé de le compiler et là, il me met une trentaine d'erreurs.Vo lecture de flux et conversion de données [ par amin79 ] J'ai un fichier texte "donnees.txt" contenant les données suivantes :1 4 62 7 9 3 2 19 4 8 17où la première colonne désigne le n° d'une tâche, la deux [socket et api win]recevoir et envoyer en meme temps [ par shadow1779 ] Bonjour je me suis fais un petit programme irc qui me servira de bot pour auto-op des personne ou d'autre taches diverses, le client aura une boite de probleme avec wininet [ par cbarcli ] voila je veux compiler le code si dessous sous dev-c++ mais ça donne des erreur du genre:   [Linker error] undefined reference to `InternetOpenA@20' RESEAU PAR SOCKET EN C [ par aziatedu13 ] bonjour,je veux faire un truk extremement simple pour certain, mais assez très difficile pour moi..voila je souhaiterai pouvoir afficher dans une cons GPIB USB [ par Gladior ] Bonjour, Je dois piloter une machine via gpib usb. J'ai ce programme : [CODE]#include #include #include using namespace std; #include "gpib/i demande d'aide [ par erb211 ] je veut que quelqu'un me corrige ce programme de chat (client/serveur):================ server.c ================ #include #include #include #include


Nos sponsors


Sondage...

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 : 0,780 sec (4)

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