Port mapping (forwarding) avec python
Hr2944
Messages postés
723
Date d'inscription
Statut
Membre
Dernière intervention
-
Hr2944 Messages postés 723 Date d'inscription Statut Membre Dernière intervention -
Hr2944 Messages postés 723 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je développe une petite application en réseau avec python en utilisant les socket. C'est un Monopoly et pour jouer en ligne, il faut créer (avec les thread) un "espace" où s'exécute la partie. Il faut aussi que cet "espace" envoye des données aux joueurs (et inversement). Seulement comme j'utilise mon pc, un message que l'on veut m'envoyer devra passer par la box internet (ici une Freebox) puis être redirigé vers mon réseau local (port forwarding).
C'est là que je bloque, il faudrait créer une redirection (de la box à mon pc) pour chaque "espace". J'ai une appli pour le faire manuellement, mais je ne peux pas utiliser ça, il faut que ce soit automatique.
J'espère que vous aurez compris, ça faut un sacré paragraphe :)
Des idées ?
Je développe une petite application en réseau avec python en utilisant les socket. C'est un Monopoly et pour jouer en ligne, il faut créer (avec les thread) un "espace" où s'exécute la partie. Il faut aussi que cet "espace" envoye des données aux joueurs (et inversement). Seulement comme j'utilise mon pc, un message que l'on veut m'envoyer devra passer par la box internet (ici une Freebox) puis être redirigé vers mon réseau local (port forwarding).
C'est là que je bloque, il faudrait créer une redirection (de la box à mon pc) pour chaque "espace". J'ai une appli pour le faire manuellement, mais je ne peux pas utiliser ça, il faut que ce soit automatique.
J'espère que vous aurez compris, ça faut un sacré paragraphe :)
Des idées ?
A voir également:
- Port forwarding python
- Advanced port scanner - Télécharger - Utilitaires
- Port usb bloqué par administrateur ✓ - Forum Windows
- Port wsd ✓ - Forum Réseau
- Port ping - Forum Windows
- Port 5000 - Forum Virus
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
je suppose que tu veux programmer l'utilisation de l'appli qui configure ta freebox. ou trouver une méthode pour modifier la configuration de ta freebox par programme.
dans le premier cas, il serait utile que tu décrives cette application.
dans le second, examiner la documentation ou contacter le fournisseur de la freebox.
toutefois, je me demande si c'est une bonne idée d'utiliser ainsi un numéro de port différent pour chaque espace. ne serait-il pas plus simple d'utiliser un seul numéro de port?
je suppose que tu veux programmer l'utilisation de l'appli qui configure ta freebox. ou trouver une méthode pour modifier la configuration de ta freebox par programme.
dans le premier cas, il serait utile que tu décrives cette application.
dans le second, examiner la documentation ou contacter le fournisseur de la freebox.
toutefois, je me demande si c'est une bonne idée d'utiliser ainsi un numéro de port différent pour chaque espace. ne serait-il pas plus simple d'utiliser un seul numéro de port?
Pour mapper les ports, j'utilise ça github.com/kaklakariada/portmapper
2) fais-tu un lien entre l'utilisation de plusieurs numéros de port et tes difficultés avec l'adresse IP?
3) je ne partage pas ton analyse à propos du message d'erreur "adresse non valide dans son contexte". qu'essaies-tu de faire avec cette adresse?
4) quel est le lien entre les threads et la nécessité d'avoir plusieurs numéros de port?
2) Non, mon problème est de faire communiquer l'espace de chaque jeu avec ses clients, le port mapping étant juste une solution possible. Je n'en trouve pas d'autre et n'ai pas d'expérience, c'est la première fois que j'utilise les socket.
3) L'erreur s'affiche car j'ai une adresse IP du client qui n'est pas sûr mon réseau local, mais le socket essaye de se connecter, dans mon réseau local, à un appareil qui a cette adresse IP. Sauf qu'il n'y en a pas, que l'adresse IP que j'ai doit être utilisée dans le réseau "globale". D'où ce message d'erreur.
4) Chaques threads représente un espace d'exécution du jeu, il doivent donc être capable de communiquer avec chaques clients. Mais pour pouvoir affecter les nouvelles données à la bonne partie en cour (donc les threads), il faut les envoyer à une adresse différente (ici les ports).
Peut être (sûrement) y a t'il une solution beaucoup plus simple que ce que je fais, mais je n'arrive pas à me l'imaginer. Merci de m'aider !
4) tu as donc un serveur qui gère plusieurs parties de Monopoly, et tu appelles "espace" une partie. comment les joueurs choisissent-ils leur partie? qui établit les connexions, le serveur ou les clients?
5) comment proposer une solution plus simple sans que tu expliques ce que tu fais? as-tu déjà écrit une partie de ton programme?
4) Le client se connecte à mon pc (mon serveur) grâce à un premier port. Un premier code lui envoye une partie_id (qui sert à mon second programme à savoir à quelle partie l'associer). Il se déconnecte de ce port pour se connecter à un autre port. Un autre code qui écoute sûr ce port là va le faire patienter jusqu'à ce que la partie qui lui est attribuée (qui est reconnue par partie_id) soit pleine (4 joueurs). Quand c'est fait, un tread va être créé et lancé. Pour communiquer, j'utilise le socket attribuée à chaque joueur (celui là même qui ne marche pas). Tout est en commande ligne au niveau de l'affichage. J'utilise deux bout de code et deux ports pour que se soit mieux organisé et ne pas m'embrouiller avec les différentes connexion. Il y a 1 code avec 1 port pour écouter les demandes de connexion à un jeu, et qui gère l'attribution des parties aux joueurs. 1 autre code avec 1 autre port gère le lancement des threads et de l'attente que la partie soit pleine.
5) Tout mon programme est écrit, comme c'est une adaptation de la version hors ligne, ce n'est pas très long. Si je pouvais utiliser comme je le veux ce socket, tout devrais marcher. Si tu as besoins d'autres infos, n'hésite pas.