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;
}