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