Probleme avec les sockets

cs_Scooper Messages postés 71 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 12 septembre 2013 - 22 mars 2005 à 09:03
cs_Scooper Messages postés 71 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 12 septembre 2013 - 22 mars 2005 à 19:16
Bonjour a tous, j'ai un soucis avec l'utilisation des sockets sous UNIX AIX v3.25.
J'ai 2 programmes : 1 client et 1 serveur.
Ces 2 programmes fonctionnent bien (c'est même ceux utilisés dans de nombreux cours).
Si je lance le serveur puis le client, ca fonctionne mais si je relance le serveur puis le client une deuxième fois, le client quitte direct et si je fais un netstat, la socket utilisée n'est pas fermé, il faut attendre environ 1minute avant de pouvoir relancer ces programmes sans erreur.
Si quelqu'un pouvais m'aider j'en serais heureux.
Merci

Voici la sources du client et du serveur :


/*client*/


#include <stdio.h>


#include <sys/types.h>


#include <sys/socket.h>

#include <netdb.h>


#include <sys/stat.h>


#include <netinet/in.h>


#define PORT 6969


void main(int argc, char *argv[])


{


int ns1,nbr_car,s1,from,fromlen;


char buf[256];


struct sockaddr_in serveur;


s1 = socket(AF_INET, SOCK_STREAM,0);


serveur.sin_family = AF_INET;


serveur.sin_addr.s_addr = inet_addr("127.0.0.1");


serveur.sin_port = htons(PORT);


connect(s1,(struct sockaddr *)&serveur, sizeof(serveur));


printf("Tapez la phrase a envoyer au serveur: ");


gets(buf);


nbr_car=strlen(buf);


write(s1,buf,nbr_car);




read(s1,buf,sizeof(buf));


printf("Serveur a dit : %s \n",buf);


printf("Tapez la phrase a envoyer au serveur: ");


gets(buf);


nbr_car=strlen(buf);


write(s1,buf,nbr_car);




read(s1,buf,sizeof(buf));


printf("Serveur a dit : %s \n",buf);


close(s1);


exit(0);


}





/*serveur*/


#include <stdio.h>


#include <sys/types.h>


#include <sys/socket.h>


#include <netdb.h>


#include <sys/stat.h>


#include <netinet/in.h>


#define PORT 6969


void main(void)


{


struct sockaddr_in serv, from;


int s1,ns1,nbr_car;


char buf[256];


int fromlen;


s1 = socket(AF_INET, SOCK_STREAM,0);


serv.sin_family = AF_INET;


serv.sin_addr.s_addr = htonl(INADDR_ANY);


serv.sin_port = htons(PORT);


bind(s1,(struct sockaddr *)&serv,sizeof(serv));


listen(s1,1);


fromlen=sizeof from;


ns1 = accept(s1,(struct sockaddr *)&from, &fromlen);


read(ns1,buf,sizeof(buf));


printf("Client a dit : %s \n",buf);


printf("Tapez la phrase a envoyer au client: ");


gets(buf);


write(ns1,buf,sizeof(buf));


read(ns1,buf,sizeof(buf));


printf("Client a dit : %s \n",buf);


printf("Tapez la phrase a envoyer au client: ");


gets(buf);


write(ns1,buf,sizeof(buf));


close(ns1);


close(s1);


exit(0);


}

2 réponses

NAVIE Messages postés 23 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 23 avril 2006
22 mars 2005 à 16:40
Je dis peut-être une bétise mais il me semble que sous Linux tu dois aussi mettre le WSAStartup.









NAVI
0
cs_Scooper Messages postés 71 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 12 septembre 2013
22 mars 2005 à 19:16
non en fait c bon, sous AIX (UNIX) c'est un systeme de sécurité :/ mais
je me suis débrouillé autrement et ca fonctionne, je laisse le serveur
tourner maintenant avec une boucle while(1) au niveau de l'accept et ca
fonctionne :)
0
Rejoignez-nous