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 :

problème client serveur


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut problème client serveur
    Bonjours,

    Voilà, j'ai ce magnifique programme qui crée un client et un serveur :

    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
    import socket
    Sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    Host = '127.0.0.1' # l'ip locale de l'ordinateur
    Port = 234         # choix d'un port
     
    # on bind notre socket :
    Sock.bind((Host,Port))
     
    # On est a l'ecoute d'une seule et unique connexion :
    Sock.listen(1)
     
    # Le script se stoppe ici jusqu'a ce qu'il y ait connexion :
    client, adresse = Sock.accept() # accepte les connexions de l'exterieur
    print "L'adresse",adresse,"vient de se connecter au serveur !"
    while 1:
            RequeteDuClient = client.recv(255) # on recoit 255 caracteres grand max
            if not RequeteDuClient: # si on ne recoit plus rien
                    break  # on break la boucle (sinon les bips vont se repeter)
            print RequeteDuClient,"\a"         # affiche les donnees envoyees, suivi d'un bip sonore
    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
    import socket # on importe le module
    Sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # on cree notre socket
     
    # definition des informations :
    Host = '127.0.0.1'
    Port = 234
     
    # on se connecte sur le serveur avec les informations ci-dessus
    # assurez-vous d'avoir mis en marche le serveur !
    Sock.connect((Host,Port))
     
    # On est connecte, on fait une boucle infinie d'inputs pour l'envoi des messages :
    while 1:
            msg = raw_input('>> ')  # on rentre des donnees
            Sock.send(msg) # on envoie ces donnees
     
    # regardez ce qui se passe du cote serveur.
    Ce sctipt marche donc en local. J'aimerais savoir s'il y a moyen de l'utliser en dehors du local.

    j'ai essayé en mettant mais j'ai eu une erreur.

    merci d'avance

  2. #2
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Pour accéder à ton serveur depuis un réseau externe (typiquement... internet), tu dois définir des paramètres de routage, qui ne sont absolument pas dépendants de Python mais bien de ton routeur / quoi que ce soit qui fait passerelle réseau

    Ou alors connecter ta machine directement au net.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Mon ordinateur est connecté à internet mais je ne sais pas comment faire pour le coder en python ... Comment faire pour se connecter "directement au net" ?


    merci

  4. #4
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par Armadeus Voir le message
    "directement au net"
    Prendre le cable qui sort du modem et le brancher à ton pc

    Dans l'hypothèse bien sur que ton modem n'est pas aussi un routeur

    Ton problème n'a rien à voir avec ton code python, mais avec la configuration de ton matériel.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Prendre le cable qui sort du modem et le brancher à ton pc

    Dans l'hypothèse bien sur que ton modem n'est pas aussi un routeur

    Ton problème n'a rien à voir avec ton code python, mais avec la configuration de ton matériel.


    là je n'y comprend plus rien ^^. Mon ordinateur est pourtant connecté à internet (la preuve je suis ici )

    je ressoie le message d'erreur suivant quand je met (pour le serveur ) host = monip(pas la locale)

    Traceback (most recent call last):
    Sock.bind((Host,Port))
    File "<string>", line 1, in bind
    error: (10049, "Can't assign requested address")

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Il faut mettre :
    De cette manière, le serveur écoutera sur toutes les interfaces réseaux.

    A priori tu es derrière un routeur donc c'est le routeur qui a l'ip publique.

    Il faut que tu translates un port du routeur vers le port de ton serveur sur ton pc.

    Enfin, ça c'est hors sujet python, c'est de l'administration réseau.

    Voir http://www.frameip.com/nat/#6_-_Comm...resse_publique

    Remarque : pour un serveur socket que tu crées toi-même, n'utilise pas un port < 1024 car ceux-ci sont réservés pour des services spécifiques (bien que tu puisses les utiliser) .

    Un peu de doc : http://www.frameip.com/liste-des-ports-tcp-udp/

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    merci

    je regarde tout ça

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Donc si je met le programme serveur sur un serveur, il devrait marcher sans problème ? (je ne sais pas si les serveur ont des routeurs ou autres ...)

    Et au niveau de la réponse du serveur au client, pensez-vous qu'il y aurait un problème si le client est derrière un routeur ?

    Si ça marche, une question crutiale reste (et même si ça ne marche pas ^^) : comment mettre un script python sur un serveur et le faire éxécuter par ce dernier ?


    merci à tous

  9. #9
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Citation Envoyé par Armadeus Voir le message
    Donc si je met le programme serveur sur un serveur, il devrait marcher sans problème ?
    Tu parles d'un serveur hébergé en ligne j'imagine.
    Oui, il devrait fonctionner, pour peu que tu mettes une adresse correcte, comme l'a dit tamiel
    Une fois que le client s'y sera connecté, aucun souci pour la transmission des données. En effet, le serveur sait qu'il trouvera le client au bout du fil, donc il n'a plus à s'en préoccuper. (comme en interne finalement)


    Pour la question cruciale, tout dépend du serveur (machine) que tu as. Dans ton cas, tu auras sans doute besoin d'un accès ssh. Peu d'hébergeurs proposent ça hélas, à moins de louer un serveur dédié.

    Si tu as la chance d'en avoir un, tu peux envoyer ton serveur par sftp. C'est un utilitaire fourni avec ssh, et qui fonctionne en console. Si tu es sous windows, putty devrait faire l'affaire.

    Je te conseille aussi de faire de ton serveur ce que l'on appelle un "daemon" (sous linux) ou "service" (sous windows), sans quoi il se coupera dès que tu termineras ta sessions ssh.
    Comment faire un daemon en Python

  10. #10
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Points : 366
    Points
    366
    Par défaut
    Salut,

    Citation Envoyé par Armadeus Voir le message
    Donc si je met le programme serveur sur un serveur, il devrait marcher sans problème ? (je ne sais pas si les serveur ont des routeurs ou autres ...)
    N'importe quel PC peut être utilisé comme serveur ; il faut juste qu'il aie accès au net (derrière un routeur ou non).

    Citation Envoyé par Armadeus Voir le message
    Et au niveau de la réponse du serveur au client, pensez-vous qu'il y aurait un problème si le client est derrière un routeur ?
    Non. Le "socket" gère tout ça. Tout ce qu'il faut, c'est que le client puisse contacter le serveur.

    Citation Envoyé par Armadeus Voir le message
    Si ça marche, une question crutiale reste (et même si ça ne marche pas ^^) : comment mettre un script python sur un serveur et le faire éxécuter par ce dernier ?
    Si le serveur est ton PC, lance simplement le programme. Si tu es chez un hébergeur, là je sais pas...

    ---

    En résumé, pour que ça marche, il faut que :
    • Côté client : Host = IP_du_serveur_ou_du_routeur
    • Côté serveur : Host = ''. Si le serveur est derrière un routeur, rediriger le port du routeur vers l'IP locale du serveur (sous la 9box, c'est l'onglet "NAT").
    Si tu as un pare-feu, assure-toi qu'il laisse les programmes concernés accéder aux ports.


    -

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Pour ce qui sont interressés, en parlant à mon ami google j'ai touvé ça :

    http://www.alwaysdata.com/offers/shared/

    ça à l'air pas mal, je vais tester.

  12. #12
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    C'est absolument hors de prix
    Cherche quelqu'un qui propose "on vous héberge" (juste histoire de pas foutre leur lien direct )

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Moi j'ai pris le pack gratuit ^^

    Par contre il ne veulent pas que l'on mette un programme serveur

    Il m'ont conseillé de faire du XML-RPC. Je ne sais pas du tout comment ça marche. J'ai regardé quelques truc sur internet mais bon.

    Si quelqu'un avait déjà un script préfait comme exemple ça m'aiderait beaucoup (j'ai cru comprendre qu'en plus il fallait du php).

    merci

  14. #14
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Je ne suis pas sur de la véracité de ce qui suit, donc c'est à prendre avec des pincettes:

    RPC signifie Remote Procedure Call (appel de procédure distante)
    En bref, ça permet de créer des applications client / serveur sans se préoccuper de la couche réseau. On appelle ça aussi de la "programmation distribuée".


    En pratique, tu as besoin d'un serveur web standard, sur lequel tu mettras tes scripts. Dans le cas de Python, il s'agira bien souvent de cgi, mais des mods existents pour apache notamment (mod_python).

    Ces scripts crééront, sur requête (HTTP donc) des clients, des modèles de données xml. Le xml peut facilement être transmis en texte, et est donc interprétable dans tous les langages et architectures. Ca permet aussi de lire à l'oeuil nu pour débugger plus facilement.


    Pour résumer, le xml-rpc n'est autre qu'un serveur http qui renvoie du xml, et un client qui l'interprète.


    Je n'ai pas d'exemple à te donner comme ça, vu que je n'en ai jamais fait. Je pense qu'un module python existe en standard pour ça, je vais un peu jouer avec tiens, ça me changera des maths :p

    Edit: il s'agit de la xmlrpclib

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    C'est dans la bibliothèque standard python

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    ok merci beaucoup, je vais regarder ça

  17. #17
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Une fois que le client s'y sera connecté, aucun souci pour la transmission des données. En effet, le serveur sait qu'il trouvera le client au bout du fil, donc il n'a plus à s'en préoccuper. (comme en interne finalement)
    Donc, il y a une possibilité de se connecter à un serveur derière un routeur juste avec les 2 adresse IP. Il doit y avoir une synthaxe spéciale pour pouvoir se rediriger dans le routeur.

    Si quelqu'un a une idée

  18. #18
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Il ne s'agit pas d'une "syntaxe spéciale", mais simplement de rêgles de routage.
    Comme dit plus haut, tu dois configurer ton routeur pour qu'il attribue certains ports à ton serveur.

  19. #19
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Points : 17
    Points
    17
    Par défaut
    Je l'ai fait mais lorsque je teste :

    [Errno 10061] Aucune connexion n'a pu être établie car l'ordinateur cible l'a expressément refusée
    Je pense que le port doit être fermé mais je ne suis pas sur. Si vous avez une idée sur le problème et surtout comment y remédier ...

  20. #20
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Si ton routeur est bien configuré, tu as peut-être aussi un firewall sur ton pc.

Discussions similaires

  1. Problème Client Serveur RMI
    Par Malhak dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 01/03/2009, 17h57
  2. Problème Client/Serveur Thread
    Par caporaldead dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/05/2008, 15h03
  3. Problème client-serveur : Err 10054
    Par Chop_chop dans le forum C++
    Réponses: 1
    Dernier message: 02/07/2007, 09h17
  4. Problème client-serveur TELNET.
    Par 0v3rb1t dans le forum Réseau
    Réponses: 5
    Dernier message: 20/05/2007, 16h59
  5. [C#] Problème client-serveur TCP
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/06/2006, 16h23

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