[c++] précisions sur les sockets

Fermé
Phileas 52 Messages postés 1 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 8 août 2007 - 8 août 2007 à 16:18
 JulienZ - 8 août 2007 à 19:30
Bonjour

Voila depuis peu je me suis interessé aux sockets, et j'ai créé, grace a un tuto un serveur multi-threads et un programme client, qui ne marche pas(le client) mais je ne viens pas demander de regler ce probleme, du moins pas tout de suite car d'abord j'aimerais comprendre les sockets^^ Par exemple, comment fait on pour se connecter a un serveur en particulier. Je ne sais pas si je suis bien clair mais voila, on créé donc une socket comme cela (sans la gestion des erreurs):

SOCKET sock;
SOCKADDR_IN sin;

sin.sin_addr.s_addr = inet_addr([l'ip]);
sin.sin_family = AF_INET;
sin.sin_port = htons([le port]);
sock = socket( AF_INET, SOCK_STREAM, 0 );
bind(sock, (SOCKADDR *)&sin, sizeof(sin));

J'ai compris l'histoire du port, on doit mettre le meme port que celui que le serveur "ecoute", mais pour l'ip..? Coté serveur, mon tuto "m'a fait" mettre l'ip de la machine sur laquelle le prgramme est executé(avec gethostname), donc mon PC^^ Mais pour le client, quelle ip mettre? et meme, qui me dit que je serais connécté au serveur que je veux en particulier, je ne comprend pas du tout ce point la. Qui dit que la fonction connect() ne vas pas aller chercher autre pars que mon serveur que j'ai créé? Et puis est il possible d'executer le serveur ET le client sur mon pc en meme temps?

Bon apres midi!

1 réponse

Salut,

Tu n'es pas sur la mauvaise voie ;)

Coté serveur tu fais :

SOCKET sock;
SOCKET sock2; // Identifiant de la nouvelle socket

SOCKADDR_IN sin;

sin.sin_family=AF_INET;
sin.sin_addr.s_addr=INADDR_ANY; // Ecoute sur toutes les IP locales
sin.sin_port=htons(1234); // Ecoute sur le port 1234
bind(sock,(struct sockaddr*)&sin,sizeof(sin)); //La commande bind permet de lier la socket à un port et adresse IP d'écoute
listen(sock,n);//Tu écoute pour finir, n représente le nombre maximal d'ouverture simultanée
temp=sizeof(sin);
sock2=accept(sock,(struct sockaddr*)&sin,&temp);


Coté client tu fais :

SOCKET sock;
SOCKADDR_IN sin;

sin.sin_addr.s_addr = inet_addr([l'ip]); // Tu met l'IP du serveur auquel tu veux te connecter
sin.sin_family = AF_INET;
sin.sin_port = htons([le port]);
sock = socket( AF_INET, SOCK_STREAM, 0 );

connect(sock,(struct sockaddr *) &sin, sizeof(sin));

Si tu execute simultanément les deux exécutable: client.exe et serveur.exe sur ta machine, tu rentre dans le client l'adresse IP de ta machine.

Voila en espérant t'avoir un peu aider

+
0