QTcpServer::write() - не отправляются пакеты

308
02 декабря 2017, 09:50

Есть следующий код маленького сервачка:

#include <QDebug>
#include <QTcpSocket>
#include <QTcpServer>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream cout(stdout);
    QTcpServer server;
    if(server.listen(QHostAddress::Any, 1122)){
        qDebug() << "Listenning....";
    }
    server.waitForNewConnection(10000);
    qDebug() << server.hasPendingConnections();
    QTcpSocket *socket = server.nextPendingConnection();
    socket->waitForReadyRead(5000);
    qDebug() << socket;
    qDebug() << socket->readAll();
    QString data = "HTTP/1.1 200 OK\r\n\r\n%1";
    socket->write(data.arg("message accepted").toLatin1());
    socket->flush();
    //socket->disconnectFromHost();
    return a.exec();
}

В браузере вбиваем адрес localhost:1122, тыцаем Enter и ждем. Сервер отображает данные которые пришли, и пытается ответить браузеру. Но ответ в браузере появляется только тогда, когда прописана строчка //socket->disconnectFromHost(); Если строку не прописывать, то ответ не приходит. Что это может быть?

Answer 1

Попробуйте воспользоваться готовым решение.
Как я понимаю, не получится просто отправить строку в сокет, что бы браузер все понял. Нужно соблюсти кодировку (UTF-8), сжать данные (zlib, gzip), заполнить шапку HTTP/REST ответа.

READ ALSO
Работа с матрицами (двумерные массивы) С++

Работа с матрицами (двумерные массивы) С++

Помогите с кодом, пожалуйста

405
wstring проблема с кириллицей

wstring проблема с кириллицей

Функция принимает на вход две части кода кириллицы (2 байта)Нужно преобразовать их в русский текст

260
Удаление элемента из списка по значению переменной [требует правки]

Удаление элемента из списка по значению переменной [требует правки]

Как написать удаление элемента односвязного списка, если этот элемент - это значение переменной другого класса?

418
Разбить строку регулярным выражением

Разбить строку регулярным выражением

При составлении регулярного выражения не получается сохранить каждую часть входного путиВходная строка:

268