Probleme avec les sockets

Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
- - Dernière réponse : 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);


}
Afficher la suite 

2 réponses

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









NAVI
Commenter la réponse de NAVIE
Messages postés
71
Date d'inscription
jeudi 2 octobre 2003
Statut
Membre
Dernière intervention
12 septembre 2013
0
Merci
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 :)
Commenter la réponse de cs_Scooper