j'avais une question sans importance mais qui me titillait, comment un client fait-il pour reconnaitre le bon serveur ?
j'entends par là si je demande à un programme client de se connecter au port 5000 d'un serveur comment ce client va trouver le bon serveur ? parce que doit y en avoir de milliers de serveur sur ce port là et même sur tous les autres (vu le nombre de zéros )
c'est une question qui m'empèche pas de vivre mais je serais interssé de connaitre la réponse.
lorsque je mets mon adresse IP dans "sin.sin_addr.s_addr" et que je lance mon client il trouve pas mon serveur après quelque seconde mon programme m'indique que la connexion a échoué (je fais un if(connect(...) != SOCKET_ERROR))
alors je dois changé un truc dans la manière d'initialisé les socket lorsqu'on veut qu'elles tournent sur le net ?
Commençons par le réseau local.
Il est formé par plusieurs PC, reliés par des cable RJ45 à des Switch ou HUB, ou encore par du Wifi...
Pour ceux qui n'aurait qu'une "box", il s'agit d'un routeur qui fait souvent office de switch (on peut brancher plusieurs cables dessus) et de point d'acces wifi.
( Laissons l'accès à internet de coté pour l'instant).
Comment configurer son réseau local ?
Chaque ordinateur doit avoir une IP (unique, cela va de sois) et doit se trouver sur le même sous-réseau.
Le sous-réseau est définit par le masque de sous-réseau, que l'on utilise lors de la configuration manuelle.
Je ne vais pas partir dans des explications sur le calculs des sous-réseau et des adresses IP. Pour faire simple, on utilise le plus souvent une IP de type 192.168.0.x (ou encore 192.168.1.x ) et comme masque de sous réseau 255.255.255.0
Pourtant, on ne fait pas ce genre de configuration. Pourquoi ?
Grace au DHCP (dynamic host configuration protocol ). Il s'agit d'un protocole où un PC, n'ayant pas de configuration va faire un appel sur le réseau. Cet appel est intercepté par un serveur DHCP (présent sur les "box") qui va donner toutes les informations pour que le PC soit correctement configuré.
Grace à tout cela, les PC d'un même réseau peuvent "dialoguer" entre eux.
Pour la connection à internet, la box faisait le lien avec internet, le DHCP envoi également l'IP de la box au PC. Celui-ci envois alors toutes les demandes de connections à internet (site Web, jeux etc...) à la box, qui fait le relais avec internet.
Et l'IP Internet dans tout ça ?
Eh bien il faut voir internet comme un autre réseau. Cette fois-ci, c'est le router ( la box ) qui va, en se connectant, demander au FAI de lui donner une adresse IP valide pour internet.
Cette IP pour être retrouver à partir de site comme http://whatismyip.org/
Quand à la programmation...
En utilisant l'IP 127.0.0.1, tu te connectes sur ta propre machine (il s'agit d'une adresse miroir. Elle revoit toujours vers la machine elle même).
C'est utile pour des tests.
Petites explication sur les ports maintenant.
Quand on se connecte sur un PC par son IP, c'est bien jolie tout ça... mais que se passe t'il ?
Si j'utilise sur un même PC plusieurs serveurs (un serveur Web, un serveur FTP, de jeu que l'on aurait programmé...) comment savoir sur quel programme le client devra se connecter ?
La réponse, c'est le port.
On va "mapper" chaque application serveur sur un port différent.
Le serveur Web sur le port 80.
Le serveur FTP sur le port 21.
Le serveur de jeu sur un autre...
Le client lui, devra se connecter à un port spécifique pour "parler" avec le serveur voulu.
Donc, pour programmer en réseau il faut:
- faire un programme serveur qui écoute sur un port.
- faire un client qui se connecte sur l'IP et le port du serveur (sans quoi, le client n'aura jamais de réponse).
Voyons un peu se ce que cela donne sur un réseau local.
J'ai crée un jeu (un serveur et un client) et je dispose de deux ordinateurs (un qui fera serveur, et l'autre le cient).
IP du serveur: 192.168.0.2
IP du client: 192.168.0.3
Je lance mon programme serveur sur le port 25200.
Pour établir la connection avec mon programme client, je dois me connecter sur 192.168.0.2, et sur le port 25200.
Comment connaitre les IP de ses machines ?
Sur Windows, par la console, on peut utiliser la commande:
ipconfig /all
Le problème, si on a une box, c'est que l'IP est donnée par la box, et donc, elle peut changer...
La solution, c'est de passer par une IP fixe sur la machine (en passant par le panneau de configuration).
Mais il faut donner toutes les informations suivante:
- l'IP de la machine (on devra s'assurer qu'elle soit toujours unique)
- le masque de sous réseau
- l'IP de la passerelle (celle de la box)
- l'IP du serveur DNS (celle de la box aussi)
Mon réseau est bien configuré, comment faire pour que d'autres personnes puissent se connecter sur mon serveur ?
Il faut bien prendre en compte que sur le net, seules les adresses IP d'Internet sont valides.
Ainsi, les joueurs devront se connecter à l'adresse donnée par les sites comme http://whatismyip.org/ et sur le port du serveur.
A ce moment là, les joueurs vont en fait se connecter au routeur (la box) sur le port spécifié. Il faut alors configurer le routeur pour qu'il redirige toutes les entrées sur ce port vers l'IP du RÉSEAU LOCAL de notre serveur ( 192.168.0.2 dans mon exemple).
En effet, le routeur n'est pas capable de savoir par lui seul pour quelle machine est destiné le message entrant.
Citation : icare14
lorsque je mets mon adresse IP dans "sin.sin_addr.s_addr" et que je lance mon client il trouve pas mon serveur après quelque seconde mon programme m'indique que la connexion a échoué (je fais un if(connect(...) != SOCKET_ERROR))
Apparement, tu utilisait ton IP internet au seins de ton réseau local. Cette IP n'existant pas dans ton réseau (puisque c'est une adresse internet) il est normal qu'aucun serveur ne soit trouvé.
Voilà, le réseau est un vaste domaine... L'expliquer en un seul poste n'est pas une chose facile, et j'espère avoir été le plus clair possible.
Ce n'est pas pour rien qu'il existe des écoles supérieures rien que pour former des administrateurs réseaux.
Pour ma part, je suis loin d'être un spécialiste... Je suis juste développeur. Mais pour savoir comment utiliser les sockets, des bases en réseaux sont indispensables.
m erci beaucoup sebajuste d'avoir répondu si tard (00h19 et édité à 00h21) et si complètement donc maintenant il ne me reste plus qu'à configurer mon modem routeur pour qu'il redirige toutes les connexion provenant de l'exterieur pour mon IP sur mon ordi
bon ben au boulot merci beaucoup à tout ceux qui ont répondu
question sur les socket
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html