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 :

PyQt4/socket : difference entre bytes et rawData


Sujet :

Réseau/Web Python

  1. #1
    Invité
    Invité(e)
    Par défaut PyQt4/socket : difference entre bytes et rawData
    Bonjour tout le monde.

    Je continue mon apprentissage de la programmation réseau, et cette fois j'explore un peu les possibilités de Qt dans le domaine.

    Pour me faire la main, j'avais décidé d'essayer de récupérer la date et l'heure sur un serveur NTP.

    Rien de très compliqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    from PyQt4 import QtNetwork
    socket = QtNetwork.QUdpSocket()
    socket.connectToHost("0.jp.pool.ntp.org",123)
    socket.waitForConnected()
    data = '\x1b' + 47 * '\0'
    socket.writeData(data)
    socket.bytesAvailable() # me renvoie 48, qui sera la longueur de ma réponse
    ans = socket.readAll()  # et je décode la structure comme il faut
    toutefois, dans la doc de PyQt, j'ai vu qu'on passait parfois par un QDataStream pour sérialiser les données transitant par des sockets.
    No problemo, ça me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from PyQt4 import QtNetwork, QtCore
    socket = QtNetwork.QUdpSocket()
    socket.connectToHost("0.jp.pool.ntp.org",123)
    socket.waitForConnected()
    data = '\x1b' + 47 * '\0'
    qdata = QtCore.QDataStream(socket)
    qdata.writeRawData(data)
    socket.bytesAvailable() # me renvoie 48, qui sera la longueur de ma réponse
    qdata.readRawData(48)  # et je décode la structure comme il faut
    Pour relire ma structure, la QDataStream serait bien utile, aussi j'ai essayé la chose suivante, mais ça ne marche pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    from PyQt4 import QtNetwork, QtCore
    socket = QtNetwork.QUdpSocket()
    socket.connectToHost("0.jp.pool.ntp.org",123)
    socket.waitForConnected()
    data = '\x1b' + 47 * '\0'
    qdata = QtCore.QDataStream(socket)
    qdata.writeBytes(data)
    socket.bytesAvailable() # me renvoie 48, qui sera la longueur de ma réponse
    qdata.readBytes()  
    # et là je n'ai plus rien !!!
    # ma seule réponse est une chaine vide.
    # Par contre, quand je fais un readRawData, ça fonctionne...
    Quelqu'un pourrait-il m'expliquer où je me trompe ???
    En lisant la doc PyQt, il semblait pourtant que readBytes et readRawData faisaient la même chose ou presque...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Juste une idée en l'air comme ça...
    Est-ce que le problème ne pourrait pas venir du fait que j'utilise des QDataStream de mon côté uniquement ?
    Le serveur NTP ne doit pas sérialiser ses données de la même façon, et donc mon DataStream n'y retrouve pas ses petits avec le type Bytes ???

Discussions similaires

  1. Socket difference entre Bind et Connect?
    Par horse dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 01/05/2010, 18h22
  2. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  3. Socket : difference entre mode actif et passif
    Par nzo70 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 28/11/2008, 18h31
  4. Difference Entre Byte() et B() as Byte
    Par Thesum dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/10/2008, 16h37
  5. [Concept] Différence entre rmi et les socket
    Par Luther13 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 14/12/2005, 14h31

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