Я пытаюсь соединить очень простой витой сервер "hello world" с базовым tcp-клиентом Qt.
Клиент использует эти сигналы:
connect(&socket, SIGNAL(connected()), this, SLOT(startTransfer()));
connect(&socket, SIGNAL(readyRead()), this, SLOT(readServer()));
, а затем readServer () выглядит следующим образом:
ui->resultLabel->setText("Reading..");
QDataStream in(&socket);
//in.setVersion(QT_4_0);
if (blockSize == 0) {
if (socket.bytesAvailable() < (int)sizeof(quint16))
return;
in >> blockSize;
}
if (socket.bytesAvailable() < blockSize)
return;
QString theResult;
in >> theResult;
qDebug() << in;
qDebug() << theResult;
ui->resultLabel->setText(theResult);
Сервер, который я использую для тестирования, является просто примером, извлеченным из документов Twisted
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
### Protocol Implementation
# This is just about the simplest possible protocol
class Echo(Protocol):
def dataReceived(self, data):
"""
As soon as any data is received, write it back.
"""
self.transport.write(data)
def main():
f = Factory()
f.protocol = Echo
reactor.listenTCP(8000, f)
reactor.run()
if __name__ == '__main__':
main()
readServer () вызывается просто отлично, но кажется, что он никогда не собирает никаких данных. Я где-то читал, что это может быть связано с оператором << QDataStream, потому что python не совсем отправляет его по частям, как ожидает Qt. </p>
Я признаю, что я не очень разбираюсь в C ++ или Qt, но идея проекта - написать клиент для работы с существующим витым сервером, поэтому, пока клиент может быть изменен, у меня не остается выбора, кроме как чтобы заставить его работать с этим сервером.
Заранее спасибо за любую помощь.