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:
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:
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:
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...