@D3Nd3R

Получение данных с помощью QTcpSocket с сервера на python?

Возникла проблема с получением данных:
Сервер на python. Получает и обрабатывает данные и отправляет результат:
def server(net, host, port):
    sock = socket.socket()
    sock.bind((host, port))
    sock.listen(1)

    print('Server start...')
    while True:
        c, addr = sock.accept()
        print('Got connection from ', addr)
        print('Receiving...')
        f = open('pic', mode='wb')

        rcvData = c.recv(BLOCK_SIZE)
        f.write(rcvData)
        while (rcvData):
            print('Receiving...')
            rcvData = c.recv(BLOCK_SIZE)
            f.write(rcvData)
        f.close()
        print('Done receiving!')

        img = cv2.imread('pic')
        objLoc = getCaption(net, img)
        print('processing is done')
        writeObjLocToCsv(objLoc, 'objs')
        z = open('objs', 'rb')
        l = z.read(BLOCK_SIZE)
        print(l)
        print('send...')
        print c.send(l)

        c.close()


Клиентская часть реализована на Qt.
Проблема в том, что не могу получить данные с сервера.
void Client::getCaption(QString &img)
{
    pmSock = new QTcpSocket(this);
    pmSock->connectToHost("127.0.0.1",12343);
    sendQImage(img);
    pmSock->waitForBytesWritten();
    reciveData();
}

void Client::reciveData()
{
    QString recvData;
    //qDebug() << pmSock->waitForReadyRead(0);
    qDebug() << "Reading: " << pmSock->bytesAvailable();//всегда 0


    qDebug() << pmSock->readAll();
    pmSock->close();
}
  • Вопрос задан
  • 579 просмотров
Решения вопроса 1
PavelK
@PavelK
Потому что reciveData нужно вызывать когда данные действительно придут.
т.е. связать с сигналом readyRead:
connect(pmSock, &QTcpSocket::readyRead, this,  &Client::reciveData );

ну или в бесконечный цикл засунуть проверку, но это не по фен-шую.
И забудьте про
waitForBytesWritten();
waitForReadyRead()

Они вешают интерфейс (полезны разве что в отдельном потоке), используйте сигналы-слоты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы