Connexion Winsock: Comment choisir cible derrière routeur et LAN?

Résolu
Signaler
Messages postés
193
Date d'inscription
dimanche 16 décembre 2001
Statut
Membre
Dernière intervention
29 juillet 2015
-
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
-
Salut,
Dans, mon prog, j'utilise winsock pour établir une connexion entre 2 PC via internet et/ou LAN. Seulement voilà, si j'installe mon programme sur plusieurs PC d'un LAN, qui sont réliés à un routeur donc tous sur internet et par conséquent ont la même IP WAN (IP internet). Et maintenant si quelqu'un veut se connecter sur de ces PC, il va utiliser l'IP internet mais après, comment faut-il s'y prendre pour choisir le PC du LAN, puisque qu'il ont le même programme et le même numéro de port en écoute? Je cherche une autre solution que: Chaque PC à un port d'écoute. S'il n'y a pas d'autres solution (simple ou pas complexe), est-il possible que le client (celui qui veut se connecter) utilise un port (ex: 1234) et se connecte en utilisant un autre port distant (ex: 5678)?

Merci d'avance

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Si tes PCs (derrière ton routeur) sont des clients, pas de problème particulier puisque ce sont eux qui demanderont la connexion vers l'extérieur.
Si tu n'as qu'un seul serveur sur ton réseau privé qui doit être accessible depuis le net :
Il te suffit de créer une règle NAT sur ton routeur pour désigner l'IP (sur le réseau privé) de la machine qui répondra à une demande de connexion sur ton IP WAN sur le port 1234
Si tu as plusieurs PCs qui doivent répondre à des demandes de connexion entrantes :
- Soit tu configures des ports différents pour chaque serveur (ce que tu veux éviter)
- Soit tu leur donnes le même port en écoute et là, il faudra dire à ton routeur de laisser entrer les demandes sur ce port (Port Triggering) afin qu'il renvoie cette même demande côté réseau privé.
Mais lequel des PC répondra (car il ne pourra y en avoir qu'un seul) ? Ca va être au plus rapide ! --> Problème à venir (je ne suis même pas sûr que cela puisse marcher en TCP).
En UDP, la demande parcourt toutes les machines du réseau. Libre alors aux machines de répondre ou pas, alors qu'en TCP, il faudra impérativement qu'une machine réponde, TCP garantit que les données sont bien distribuées, ce qui n'est pas le cas d'UDP où la requète est envoyée mais sans "accusé réception".

Pour ta dernière question : Quand un Winsock se connecte à un serveur, on configure le port du serveur (destinataire), mais en général, on n'impose pas de port côté client (émetteur), on laisse faire le gestionnaire pour qu'il utilise le premier port disponible.
Si tu veux qu'un client extérieur fasse sa demande sur ton port 1234 et que ta machine côté réseau privé recoive cette même demande sur un autre port 5678, il suffit de le dire dans la configuration sur service NAT (port externe 1234, port interne 5678).

En final, je te suggère donc fortement d'utiliser des n° de ports différents pour chacune des machines devant servir de serveur.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
193
Date d'inscription
dimanche 16 décembre 2001
Statut
Membre
Dernière intervention
29 juillet 2015

Je te remercie pour ta réponse. Du coup de vais voir pour attribuer un port différent pour chaque machine...
@+

--------------------------------------------------------------------------
Visitez mon site sur http://bp-software.ifrance.com/
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
je te savais pas spécialiste du réseau, Jack.... on en apprend tous les jours ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic