tknmb1
Messages postés2Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention20 juin 2010
-
20 juin 2010 à 16:42
tknmb1
Messages postés2Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention20 juin 2010
-
20 juin 2010 à 17:37
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;
}
tknmb1
Messages postés2Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention20 juin 2010 20 juin 2010 à 17:37
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