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é
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.
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
No problemo, ça me donne
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 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
Quelqu'un pourrait-il m'expliquer où je me trompe ???
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...
En lisant la doc PyQt, il semblait pourtant que readBytes et readRawData faisaient la même chose ou presque...
Partager