IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Socket - jeux multijoueur - zone de connexion - serveur client


Sujet :

Réseau/Web Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 45
    Points : 38
    Points
    38
    Par défaut Socket - jeux multijoueur - zone de connexion - serveur client
    Bonjour,

    J'ai programmé mon jeux de bataille Navale en Python, maintenant je souhaite le rendre jouable sur deux PC distants.
    Je me suis assez documenté, bien que très novice en réseau, et j'utilise la bibliothèque socket de python.

    J'ai réussi à créer un serveur et un client, qui arrivent à communiquer, cependant j'aurais besoin d'aide et d'éclaircissement sur certains points, les voici :

    • Pour le moment je n'arrive à communiquer quand utilisant l'adresse local du serveur, cependant si je souhaite utiliser l'adresse ip web afin de ne plus avoir de distance limite ça ne fonctionne plus. Est ce quelque chose de faisable pour un débutant, comment m'y prendre ?
    • L'adresse local du serveur change en fonction de la position du joueur, donc comment la récupérer avec une fonction python ?
    • Un joueur peut être serveur ou client en fonction de s'il créer la partie ou non. Donc j'aimerais à la manière de certain jeux tel que CSS, créer une zone de connexion ou un joueur peut créer une partie dans ce cas là il sera serveur, son adresse ipv4 sera partagé et la partie commencera si un autre joueur le rejoins dans ce cas là celui ci sera client. Il faudrait donc pour cela que quand on lance le jeux on puisse voir toute les parties créées (serveur) en attentes d'un adversaire (client) dans une zone donnée puisque c'est l'adresse local qui est utilisée. Et ça je ne vois pas comment m'y prendre, il faudrait avant même qu'il y est une connexion entre un serveur et un client, identifier tous les serveurs créés en attentes de client. Est ce faisable ? Pourriez vous me donnez une piste ?


    Je vous remercie, toute aide sera grandement apprécié, bonne après-midi.

  2. #2
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Citation Envoyé par Romaiiiiiin Voir le message

    [LIST][*]Pour le moment je n'arrive à communiquer quand utilisant l'adresse local du serveur, cependant si je souhaite utiliser l'adresse ip web afin de ne plus avoir de distance limite ça ne fonctionne plus. Est ce quelque chose de faisable pour un débutant, comment m'y prendre ?
    Si tu sors de ton réseau privé c'est ton adresse IP publique qui doit être donné aux clients, prévoir éventuellement une redirection de ports

    Citation Envoyé par Romaiiiiiin Voir le message

    [LIST][*]L'adresse local du serveur change en fonction de la position du joueur, donc comment la récupérer avec une fonction python ?
    Peux tu développer un peut et illustrer ce n'est pas clair du tout et ça me semble vraiment étrange

    Citation Envoyé par Romaiiiiiin Voir le message

    • Un joueur peut être serveur ou client en fonction de s'il créer la partie ou non. Donc j'aimerais à la manière de certain jeux tel que CSS, créer une zone de connexion ou un joueur peut créer une partie dans ce cas là il sera serveur, son adresse ipv4 sera partagé et la partie commencera si un autre joueur le rejoins dans ce cas là celui ci sera client. Il faudrait donc pour cela que quand on lance le jeux on puisse voir toute les parties créées (serveur) en attentes d'un adversaire (client) dans une zone donnée puisque c'est l'adresse local qui est utilisée. Et ça je ne vois pas comment m'y prendre, il faudrait avant même qu'il y est une connexion entre un serveur et un client, identifier tous les serveurs créés en attentes de client. Est ce faisable ? Pourriez vous me donnez une piste ?


    Je vous remercie, toute aide sera grandement apprécié, bonne après-midi.
    Pourquoi ne pas développer uniquement un mode " lan et passer via un service tiers afin de faire du "online" ? (Style evolve ou hamachi) afin de créer un vin entre tes deux machines

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 45
    Points : 38
    Points
    38
    Par défaut
    • C'est bien ça, lorsque j'entre mon adresse publique et mon port dans la fonction bind du socket que je trouve par exemple ici http://www.mon-ip.com/ , je n'arrive plus à lancer le serveur, je me retrouve avec ce message d'erreur : OSError : Can't assign requested address. Je ne comprend pas bien pourquoi, as tu une idée ?
    • Par exemple chez moi mon adresse local est 192.168.1.55, mais si je change de wifi cette adresse changera non ? Si oui il faudrait une fonction pour récupérer cette adresse ou qu'on soit sans avoir à la taper à la main.
    • Alors tu me perds un peux là ^^, déjà qu'est ce qu'un mode "lan" et un "vin" ? Ensuite je connais Hamachi, mais je ne savais pas que c'était possible de le faire communiquer avec du python, je vais me renseigner dessus. Cependant j'aurais souhaité ne pas avoir à rajouter de logiciel tiers afin de faire tourner l'application, est ce le meilleur moyen ?


    Merci.

  4. #4
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Un serveur par définition doit être accessible via une IP FIXE, sinon à chaque changement d'ip tu dois mettre à jour tes clients.

    Si je prend ton cas de figure, un joueur met en place une partie elle sera accessible via ton ip local. Si tu veux y accéder via ton IP publique tu dois ouvrir le port concerné sur ton routeur. C'est pour ça que je te suggère de passer par un service tiers pour effectuer la jonction entre toi et ton ami. Cela t'évite d'ouvrir des ports sur ton routeur pour un même résultat

    Si tu adresse local est 192.168.1.55, il s'agit ici d'une plage d'IP dite "privé". Au de la de ta box tu es identifié par une autre IP (publique) il faut donc sur cette ip publique effectuer une redirection de port vers ton "host(192.168.1.55)", c'est directement plus lourd a mettre en place surtout si ton ip n'est pas fixe.(a chaque changement d'ip tu devra refaire une redirection et donc ouvrir un peut plus ton réseau donc moins sécurisé)

    D'un point de vu pratique et sécurité je te conseil de rester sur cette configuration(tout en local via evolve ou hamachi pour faire ton pont entre les différents joueurs de ton jeux.

    Les grosses productions peuvent se permettent de fournir un accès "en ligne" aux joueurs car ils disposent des serveurs dédié à ça, dans ton cas de figure c'est le créateur de la partie le serveur il faut donc configurer le reste de la route en conséquence


    (désolé pour l'orthographe, je suis sur un MAC et le correcteur orthographique fonctionne aussi bien que la première version de apple plans)

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    je pense plutot que Lekno a eu un problème de doigts, il fallait lire "vpn"

    tu parles toi même d'"adresse locale", LAN est l'acronyme de Local Area Network, 192.168.x.y est typiquement une adresse de ton LAN, ton réseau local, par opposition à du WAN par exemple pour évoquer le réseau Internet (Wide Area Network)

    evolve, hamachi sont des VPN (Virtual Private Network) qui permettent comme leur nom l'indique de créer des réseaux privés (entre copains) virtuels, il ne s'agit pas de libs ou autres bindings pour python, c'est des composants réseau, n'importe quel programme peut les utiliser en se connectant dessus (et en l'ayant configuré convenablement évidement)

    ce que tu cherches à faire - bien que très louable et intéressant - est assez difficile, il va te falloir créer (imaginer) un protocole de communication entre ton serveur et ses clients pour synchroniser les données, les renvoyer à chacun, gérer les connexions/déconnexions/pertes de connexion/etc. ça ne s'improvise pas, si tu n'as pas les moindres bases de compréhension des réseaux t'es pas prêt d'aboutir, il faut en être conscient...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 45
    Points : 38
    Points
    38
    Par défaut
    Aucun problème je ne suis moi même pas une fine fleur en la matière
    Citation Envoyé par Lekno Voir le message
    (désolé pour l'orthographe, je suis sur un MAC et le correcteur orthographique fonctionne aussi bien que la première version de apple plans)
    Tu voulais écrire son ip local ?
    Citation Envoyé par Lekno Voir le message
    Si je prend ton cas de figure, un joueur met en place une partie elle sera accessible via ton ip local.
    Merci beaucoup, me reste à comprendre comment faire communiquer Hamachi avec mon programme Python. Je repasserais si j'ai d'autre question.

  7. #7
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    Je te conseil evolve a la place de hamachi, tu n'as rien a configurer tu installe le soft, tu te lot dans un salon la le logiciel te fourni une IP en 10.X.X.X c'est cette IP que tu utilises, tu cté une partie tu donnes ton IP a ton ami, si c'est lui c'est l'inverse. Il faut bien sur que vous soyez tout les deux dans la meme room sur volve.

    evolve te permet de créer un "pont" entre ton pc et celui de ton ami, si tu regardes bien il va te créer une nouvelle connexion réseau. Ainsi tu peux utiliser l'ip local fourni pour TOUT les softs.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 45
    Points : 38
    Points
    38
    Par défaut
    Bonjour BufferBob

    Tu as surement raison, mais je vais essayer, je sais déjà comment gérer les données une fois les deux joueurs connectés elle sont simple se ne sont que des coordonnées, puis n'ayant que deux joueurs je sais facilement ou les ranger. Après ce qui me bloque c'est plus l'avant jeux, la recherche d'une partie, j'essaierais avec Evolve si je vois que ça se corse trop je passerais à une méthode manuelle ou le joueur 2 (client) devra entrer manuellement l'adresse et le port du joueur 1 (serveur) qui est en attente d’adversaire.

    En tout cas merci à vous.

Discussions similaires

  1. comment initier une connexion serveur-client
    Par nadia mr dans le forum Développement
    Réponses: 2
    Dernier message: 09/04/2014, 15h01
  2. TP : Connexion serveur - client et envoi message
    Par leilald dans le forum Réseau
    Réponses: 5
    Dernier message: 13/12/2013, 21h43
  3. Connexion serveur / client en utilisant l'adresse IP externe
    Par sghaierbs dans le forum Entrée/Sortie
    Réponses: 31
    Dernier message: 10/02/2013, 17h48
  4. Connexion serveur/client : exception lors du lancement du client
    Par khyllou dans le forum Général Java
    Réponses: 3
    Dernier message: 07/02/2010, 11h13
  5. Réponses: 6
    Dernier message: 25/08/2006, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo