Application client/serveur

Signaler
Messages postés
2
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
20 juin 2010
-
Messages postés
2
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
20 juin 2010
-
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
#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 \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
#include
#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;
}

2 réponses

Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
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
Messages postés
2
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
20 juin 2010

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