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

Python Discussion :

Gros problème de socket avec Python


Sujet :

Python

  1. #1
    Membre actif Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut Gros problème de socket avec Python
    Bonjour,
    Il y a quelque jours, j'ai développé un serveur en python. Sauf que depuis hier j'ai un gros problème avec ce serveur. Mon serveur était fonctionnel et depuis hier, lorsque mon client se connecte au serveur, il change son port d'écoute. J'avais configuré le serveur pour qu'il écoute sur le port 8044, et voilà que quand je me connecte avec un client, sur le bon port et la bonne ip, le socket est configuré avec un autre port : 3040.
    Et si je relance le serveur, le port augmente de 1 à chaque fois (3041, 3042, 3043...)

    Je précise aussi, même si je ne pense pas que c'est lié à ça parce que il y a même pas 3 jours ça fonctionnait, j'ai aussi un serveur wamp qui est lancé, car mon client est une application PHP.

    Voilà, j'espère avoir été clair, parce que j'ai jamais vu ça... Je vous envoie le code de l'initialisation du serveur et du client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.bind(('127.0.0.1', 8044))
    socket.listen(30)
    remote_socket, info_connection = socket.accept()
    print(info_connection) -> ('127.0.0.1', 3040) ?????????????????????????????????
    Et voici le code du client en PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, '127.0.0.1', 8044);
    return $socket;
    Voilà, j'attends avec impatience votre réponse, car là je vos avoue que je suis dans l'incompréhension totale.
    Cordialement.

  2. #2
    Membre actif Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    NB : Même quand je change le port d'écoute du serveur, j'ai mis 3040, le serveur change le port inexplicablement en 3200.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Relisez votre code le port d'écoute est la variable "socket" (le choix du nom n'est pas très judicieux...) et le port client est "info_connection".
    Revoyez ce qu'est une connexion TCP/IP et la différence entre port source et port destination.

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

  4. #4
    Membre actif Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Merci de votre réponse. Mais le problème qui se pose, c'est que le programme se bloque à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msg = remote_socket.recv(1024)
    Je pensais que c'était un problème de port mais à vous en croire ce n'est pas ça. Enfin si j'ai bien compris, il est normal que la variable info_connection indique un port différent que celui qui a été définit.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par Tornade8912 Voir le message
    Mais le problème qui se pose, c'est que le programme se bloque à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msg = remote_socket.recv(1024)
    Je pensais que c'était un problème de port mais à vous en croire ce n'est pas ça. Enfin si j'ai bien compris, il est normal que la variable info_connection indique un port différent que celui qui a été définit.
    Si vous arrivez à cette ligne là, c'est que la connexion est établie. Et en gros çà bloque tant que rien n'a été reçu: donc il faut vous assurer que quelque chose a bien été expédié côté client.

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

  6. #6
    Membre actif Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Ah ! Et c'est bien ça le problème, c'est que j'ai fait plusieurs test côté php, en mettant des print, et le client attend une réponse du serveur. Donc côté client, logiquement, il a bien envoyé, et côté serveur ça bloque sur la réception. WTF.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    socket_write($socket, $msg, strlen($msg));
    return 'test';
    $reponse = socket_read($socket, 1024);
    return $reponse;
    et la page affiche :
    et le navigateur continue à charger la page ...........

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par Tornade8912 Voir le message
    Ah ! Et c'est bien ça le problème, c'est que j'ai fait plusieurs test côté php, en mettant des print, et le client attend une réponse du serveur. Donc côté client, logiquement, il a bien envoyé, et côté serveur ça bloque sur la réception. WTF.
    Ecrivez un client Python pour tester votre serveur et accessoirement de poster le code permettant de reproduire votre problème.

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

  8. #8
    Membre actif Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Je viens de tester ce code :
    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
     
    #!/usr/bin/env python
    # coding: utf-8
     
    import socket
     
    hote = "127.0.0.1"
    port = 8044
     
    socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    socket.connect((hote, port))
    print "Connection on {}".format(port)
     
    socket.send(b"test")
     
    print "Close"
    socket.close()
    Et même blocage côté serveur. Par contre le client est 100% fonctionnel.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    et il est où le code du serveur?

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

  10. #10
    Membre actif Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Ah oui pardon, le voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    local_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    local_socket.bind(('127.0.0.1', 8044))
    local_socket.listen(30)
    remote_socket, info_connection = local_socket.accept()
     
    msg = remote_socket.recv(1024)
    print(msg)
     
    msg = raw_input()
    remote_socket.send(msg)
     
    local_socket.close()
    remote_socket.close()

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Votre code fonctionne chez moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> import socket
    >>> socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    >>> socket.bind(('127.0.0.1', 8044))
    >>> socket.listen(30)
    >>> remote_socket, info_connection = socket.accept()
    >>>
    ... msg = remote_socket.recv(1024)
    >>> print(msg)
    b'test'
    >>>
    note: sans pouvoir reproduire, le code étant a peu près correct...
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre actif Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Par défaut
    Je ne comprends plus rien là... Je ne vois pas comment mon serveur a pu cesser de fonctionner du jour au lendemain ...
    Enfin dans tous les cas merci d'avoir prêté attention à mon problème, je vais essayer de réécrire partiellement le serveur, et puis je verrai bien. je vous tiendrai au courant.
    Bonne journée.

Discussions similaires

  1. Problème de socket avec le debogeur VS
    Par Math28 dans le forum Windows Mobile
    Réponses: 4
    Dernier message: 10/12/2007, 13h52
  2. Gros problèmes de CSS avec IE et Mozilla
    Par kevinf dans le forum Mise en page CSS
    Réponses: 15
    Dernier message: 24/05/2007, 11h03
  3. Gros problème d'export avec phpMyAdmin (.SQL bizarres)
    Par Meteorshadow dans le forum Outils
    Réponses: 3
    Dernier message: 27/08/2006, 04h44
  4. Problême de Socket avec un applet java (RMI/policy)
    Par Vesperal dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 12/04/2006, 12h00
  5. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36

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