andoid
Messages postés106Date d'inscriptionsamedi 31 mars 2012StatutMembreDernière intervention16 juin 2013
-
25 févr. 2012 à 23:15
omarF
Messages postés82Date d'inscriptiondimanche 25 janvier 2009StatutMembreDernière intervention24 novembre 2012
-
24 nov. 2012 à 14:03
Bonjour
j'ai mon programme suivant qui marche et je suis en route pour creer mon serveur pour l'instant le client qui se connecte je lui envoi juste le message bonjour.
Mais mon probléme se trouve au niveau du port en effet si je lance le programme la premiere j'arrive a communiquer avec le client par contre si je réexecute le programme j'ai ce message bind:Address already in use voici le code de mon serveur:
/* Socket et contexte d'adressage du serveur */
SOCKADDR_IN sin;
SOCKET sock;
socklen_t recsize = sizeof(sin);
/* Socket et contexte d'adressage du client */
SOCKADDR_IN csin;
SOCKET csock;
socklen_t crecsize = sizeof(csin);
int sock_err;
if(!erreur)
{
/* Création d'une socket */
sock = socket(AF_INET, SOCK_STREAM, 0);
/* Si la socket est valide */
if(sock != INVALID_SOCKET)
{
printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);
/* Configuration */
sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */
sin.sin_family = AF_INET; /* Protocole familial (IP) */
sin.sin_port = htons(PORT); /* Listage du port passage au format réseau */
sock_err = bind(sock, (SOCKADDR*)&sin, recsize);
/* Si la socket fonctionne */
if(sock_err != SOCKET_ERROR)
{
/* Démarrage du listage (mode server) */
sock_err = listen(sock, 5);
printf("Listage du port %d...\n", PORT);
/* Si la socket fonctionne */
if(sock_err != SOCKET_ERROR)
{
signal(SIGCHLD,SIG_IGN);
/*Pour que le pére detruit à lui seul les processus zombie on place ce code avant la boucle fausse signal(SIGCHLD,SIG_IGN)*/
/*Pour un serveur parallel c'est là que je vais mettre ma boucle while(1) */
/* Attente pendant laquelle le client se connecte */
printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);
csock = accept(sock, (SOCKADDR*)&csin, &crecsize);
/*Aprés le teste sur la socket csock je peux faire un fork() pour que le fils s'occupe du traitement des demandes de service des clients */
printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
/* Fermeture de la socket client et de la socket serveur */
printf("Fermeture de la socket client\n");
closesocket(csock);
printf("Fermeture de la socket serveur\n");
closesocket(sock);
printf("Fermeture du serveur terminée\n");
}
else
perror("socket");
}
return EXIT_SUCCESS;
}
A voir également:
Bind address already in use
Address already in use. - Meilleures réponses
Address already in use bind c - Meilleures réponses