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 bloquante python?


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut socket bloquante python?
    Bonjour,

    Mon problème est le suivant. Mon client python envoit des données à un serveur, ces dernières sont traitées mais je n'arrive pas à récupérer les fruits de ce traitement. Il semblerait que mon client python bloque au niveau de la commande recv().

    remarques : - Je tiens à préciser que ni le client, ni le serveur ne sont fermés à ce moment là.
    - recv() est fait après le dernier send()
    - j'arrive à récupérer une réponse du serveur uniquement si cela est fait avant le traitment

    Merci pour votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut
    salut,
    erreur générée ? si oui la quelle
    t'as fais le necessaire pour etre sure que ça bloque au niveau de ton recv() ?
    en tk le recv é bloquant en attente de données
    il y'a de quoi le rendre non bloquant ou bloqué pendant T (sec)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Socket.setblocking (0)
    #equivalent to Socket.settimeout(0);
    enfin je n'arive po a cerner ton probleme !

    plus de details stp

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci de ta réponse mais j'ai résolu ce problème de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            self.socket.settimeout(1)
            try:
                self.data = self.socket.recv(1024)
                print self.data
            except:
                pass
    Je pense que ça rejoint ta réponse.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut kakuzu
    Au début pour obtenir le code source d'une page web, je faisais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import urllib
    sock = urllib.urlopen(url)
    htmlSource = sock.read()    
    sock.close()
    fpage = open('fa', 'w')
    fpage.write(htmlSource)
    fpage.close()
    fpage =open('fa','r')
    Comme ça passait par l'écriture d'un fichier sur le disque dur, j'ai cherché autre chose et j'ai pensé que ce serait beaucoup mieux et plus rapide de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import urllib
    sock = urllib.urlopen(url)
    codpage = sock.readlines()
    sock.close()
    Cependant quand je faisais tourner un programme utilisant plusieurs fois ces instructions, il lui arrivait assez souvent de planter.
    J'ai mis longtemps à comprendre qu'il y avait un problème à cause du readlines().
    Je crois qu'à certains moments, le code source ne parvenait pas en entier à sock et que readlines() attendait la fin à perte de vue.

    En tous cas, j'ai beaucoup beaucoup beaucoup moins de problèmes depuis que j'utilise le bout de code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import urllib
    sock = urllib.urlopen(url)
    codsplit = sock.read().splitlines()
    sock.close()
    Si la fin du code source n'arrive pas, read() ne se fige pas dans l'attente et codsplit contient quand même des lignes.
    On peut tester si tout le code source est arrivé par:
    if codsplit[-1]=='</HTML>'

    Je ne sais pas si ça a rapport avec ton problème et si ça t'aidera, mais c'est de toutes façons utile à savoir je pense.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci pour l'info!

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2008
    Messages : 36
    Points : 22
    Points
    22
    Par défaut tres bien
    tant mieux !
    bonne continuation

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

Discussions similaires

  1. [Python 3.X] Module socket sur python
    Par python_user dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 01/02/2015, 18h56
  2. Problème Swing / socket bloquant
    Par soussou92 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 12/05/2010, 13h29
  3. problème de socket bloquante
    Par phoenixatareva dans le forum C
    Réponses: 3
    Dernier message: 25/03/2010, 13h16
  4. Socket bloquante + redirection
    Par dvp_zero dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 10/03/2010, 20h21
  5. Problème de socket bloquant et select sans effet.
    Par asmerisme dans le forum Réseau
    Réponses: 5
    Dernier message: 23/02/2010, 18h55

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