class Socket(QTcpSocket):
def __init__(self, parent=None):
super(Socket, self).__init__(parent)
self.connect(self, SIGNAL("readyRead()"), self.readRequest)
self.connect(self, SIGNAL("disconnected()"), self.deleteLater)
self.nextBlockSize = 0
def readRequest(self):
stream = QDataStream(self)
stream.setVersion(QDataStream.Qt_4_2)
if self.nextBlockSize == 0:
if self.bytesAvailable() < SIZEOF_UINT16:
return
self.nextBlockSize = stream.readUInt16()
if self.bytesAvailable() < self.nextBlockSize:
return
action = QString()
room = QString()
date = QDate()
stream >> action
if action in ("BOOK", "UNBOOK"):
stream >> room >> date
bookings = Bookings.get(date.toPyDate())
uroom = unicode(room)
“stream >> action” на “action = stream.readString()” результать такой же, тип получаемых данных NoneType
при отсылке ответа сервером:
def sendError(self, msg):
reply = QByteArray()
stream = QDataStream(reply, QIODevice.WriteOnly)
stream.setVersion(QDataStream.Qt_4_2)
stream.writeUInt16(0)
#stream << QString("ERROR") << QString(msg)
stream.writeString("Helloo")
stream.device().seek(0)
stream.writeUInt16(reply.size() - SIZEOF_UINT16)
self.write(reply)
до этого данные передавались в QString и на машине без установленного QT их весьма проблемматично обрабатывать. но посылаемые writeString() данные тоже выглядели не совсем правильными, хотя и на много ближе к истине, если быть точнее, то в начале строки передавались спецсимволы “^K\000\000\000^G”
код клиента:
import socket
import sys
HOST, PORT = "localhost", 9407
# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to server and send data
sock.connect((HOST, PORT))
sock.send("BOOK")
# Receive data from the server and shut down
received = sock.recv(1024).strip("^K\000\000\000^G")
sock.close()
print "Sent: %s" % data
print "Received: %s" % received