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 :

Python socket problème d'adresse ip


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Par défaut Python socket problème d'adresse ip
    Bonjour,
    Avec le module socket de python, j'ai écrit deux programmes très simples qui permettent une communication client/serveur entre deux ordinateurs. J'exécute ces programmes sur des ordinateurs tournant sous Windows

    programme serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # Le serveur attend la connexion d'un client, pour entamer un dialogue avec lui
    import socket
    from time import time
     
    HOST = '192.174.0.56' # adresse ip du serveur
    PORT = 50000
    CODE = 'utf8'
     
    mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    try :
        mySocket.bind((HOST, PORT))
    except socket.error :
        print("La liaison du socket à l'adresse choisie a échoué.")
        raise
     
    while 1 :
        print("Serveur prêt, en attente de requêtes ...")
        mySocket.listen(5)
     
        connexion, adresse = mySocket.accept()
        print(f"Client connecté, adresse IP {adresse[0]}, port {adresse[1]}")
     
        connexion.send(bytes("Vous êtes connecté au serveur. "+\
                             "Envoyez vos messages.", CODE))
     
        clientMsg = connexion.recv(1024).decode(CODE)
        while 1 :
            print("C>", clientMsg)
            if clientMsg.lower() == "stop" or clientMsg == "" :
                serverMsg = '__STOP'
                connexion.send(bytes(serverMsg, CODE))
                break
            serverMsg = str(time())
            print('S>', serverMsg)
            # le serveur répond en affichant le temps
            connexion.send(bytes(serverMsg, CODE))
            clientMsg = connexion.recv(1024).decode(CODE)
     
        connexion.send(bytes("Au revoir !", CODE))
        print("Connexion interrompue.")
        connexion.close()
    programme client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import socket, sys
     
    HOST = '192.174.0.56' # adresse ip du serveur
    PORT = 50000
    CODE = 'utf8'
     
    connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     
    try :
        connexion.connect((HOST, PORT))
    except socket.error :
        print("La connexion a échoué.")
        sys.exit()    
    print("Connexion établie avec le serveur.")
     
    serverMsg = connexion.recv(1024).decode(CODE)
     
    while 1 :
        if serverMsg == "__STOP" :
            break
        print("S>", serverMsg)
        clientMsg = input("C> ")
        connexion.send(bytes(clientMsg, CODE))
        serverMsg = connexion.recv(1024).decode(CODE)
     
    print("Connexion interrompue.")
    connexion.close()
    Ces deux programmes fonctionnent très bien lorsque le client et le serveur sont deux ordinateurs qui sont connectés en réseau local dans la même maison. Cependant, si je veux que le client et le serveur puissent être dans deux maisons différentes, il faut qu'ils communiquent par internet. Pour cela, j'ai cru comprendre qu'il fallait remplacer l'adresse ip HOST par l'adresse internet de l'ordinateur qui exécute le programme serveur. J'ai récupéré cette dernière adresse grâce au site internet https://www.whatismyip.com/
    Supposons par exemple que l'adresse ip internet de l'ordinateur qui exécute le programme serveur soit 98.124.101.65
    Lorsque j'exécute le programme serveur avec cette dernière adresse, python lève l'exception suivante :
    OSError: [WinError 10049] L’adresse demandée n’est pas valide dans son contexte
    Que dois-je faire pour que les deux ordinateurs puissent communiquer via internet ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 744
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Que dois-je faire pour que les deux ordinateurs puissent communiquer via internet ?
    Configurer votre box internet pour autoriser l'accès via un port déterminé.
    Pas grand chose a voir avec la programmation Python...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Configurer votre box internet pour autoriser l'accès via un port déterminé.
    - W
    Sinon, est-ce que je peux modifier le port utilisé dans mon programme et prendre par exemple le port 80 ou 110 ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 744
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Sinon, est-ce que je peux modifier le port utilisé dans mon programme et prendre par exemple le port 80 ou 110 ?
    Vous pouvez toujours modifier le port utilisé par le serveur.
    Le client ne pourra pas passer à travers le boîtier qui vous relie à Internet (et l'atteindre) pour autant.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Par défaut
    Premièrement, l'erreur levée par python dit que "l'adresse demandée n'est pas valide" mais ne mentionne pas le port utilisé.
    Deuxièmement, le seul port que je choisit dans le programme est le port utilisé par le serveur. Vous me parlez du port utilisé par ma box internet mais il me semble que je n'ai aucun contrôle sur ce paramètre.
    Je n'ai donc pas vraiment saisit la nature du problème :
    1) Est-ce que la méthode mySocket.bind((HOST, PORT)) peut être utilisée avec HOST étant une adresse ip internet ou alors seulement avec HOST étant une adresse ip locale ?
    2) Comment puis-je savoir quel port je dois débloquer sur ma box internet ?
    3) Suis-je obligé de débloquer un nouveau port ? Il ne serait pas plus sécurisé d'utiliser un port déjà libre ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 744
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    Je n'ai donc pas vraiment saisit la nature du problème
    Pour faire de la programmation réseau, il faut se donner la peine de comprendre comment fonctionne un réseau (et vous avez toute une rubrique qui y est consacrée).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Par défaut
    Avez vous "pris la peine" de lire mon post jusqu'au bout ? Vous ne répondez pas à ces questions
    Citation Envoyé par LeVicThor Voir le message
    1) Est-ce que la méthode mySocket.bind((HOST, PORT)) peut être utilisée avec HOST étant une adresse ip internet ou alors seulement avec HOST étant une adresse ip locale ?
    2) Comment puis-je savoir quel port je dois débloquer sur ma box internet ?
    3) Suis-je obligé de débloquer un nouveau port ? Il ne serait pas plus sécurisé d'utiliser un port déjà libre ?
    Par ailleurs, sachez que je "prend la peine" de me documenter sur le fonctionnement des réseaux. Mais je pense que vous êtes conscient que si je viens poser des questions ici, c'est qu'il y a des choses que je n'ai pas compris malgré mes recherches, ce n'est pas pour qu'on me conseille d'aller chercher tout seul autre part.

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 12
    Par défaut
    Citation Envoyé par LeVicThor Voir le message
    l'erreur levée par python dit que "l'adresse demandée n'est pas valide" mais ne mentionne pas le port utilisé.
    Deuxièmement, le seul port que je choisit dans le programme est le port utilisé par le serveur. Vous me parlez du port utilisé par ma box internet mais il me semble que je n'ai aucun contrôle sur ce paramètre.
    Citation Envoyé par LeVicThor Voir le message
    Est-ce que la méthode mySocket.bind((HOST, PORT)) peut être utilisée avec HOST étant une adresse ip internet ou alors seulement avec HOST étant une adresse ip locale ?
    Je parle clairement du langage python là. Et si vous me répondez en me disant d'aller lire la documentation du module socket (ce que j'ai déjà fait), alors permettez moi de douter de l'utilité de ce forum.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Modbus RTU] Problème d'adresse
    Par virginoue dans le forum Autres langages
    Réponses: 1
    Dernier message: 16/05/2006, 08h33
  2. [socket] Problème avec les options
    Par gangsoleil dans le forum Développement
    Réponses: 3
    Dernier message: 13/07/2005, 13h11
  3. [Socket] Problème de lecture flux danss communication
    Par tooney dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/06/2005, 11h08
  4. [Thread][socket]Problème de fermeture d'un thread
    Par meda dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 04/11/2004, 01h03
  5. socket : problème avec GetHostByName
    Par SteelBox dans le forum Réseau
    Réponses: 25
    Dernier message: 19/08/2003, 13h49

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