Russian Qt Forum

Qt => Работа с сетью => Тема начата: barny078 от Января 29, 2014, 12:42



Название: Передача изображения
Отправлено: barny078 от Января 29, 2014, 12:42
Всем привет.

Есть программа http-сервер. К нему коннектится браузер по адресу 127.0.0.1/p.png. В ответ должна отобразиться картинка, но этого не происходит.

Код обработки клиента:

Код:
QByteArray arrBlock;
QTcpSocket* clientSocket = (QTcpSocket*)sender();
    QStringList tokens = QString(clientSocket->readLine()).split(QRegExp("[ \r\n][ \r\n]*"));
    if (tokens[0] == "GET") {
        tokens[1] = tokens[1].prepend(".");
    }

if (tokens[1] == "./p.png")
    {
        QPicture pic;
        pic.load(tokens[1]);
        QDataStream out(&arrBlock, QIODevice::WriteOnly);
        int size = pic.size();
        out << "HTTP/1.0 200 Ok\r\n"
               "Content-Type: image/png\r\n"
               "Content-Length: " << size << "\r\n"
               "\r\n";
        out.writeRawData(pic.data(), size);
        clientSocket->write(arrBlock);
     }
Что не так?

PS Еще в выводе возникает уведомление "QPicturePaintEngine::checkFormat: Incorrect header", но при этом переменная size показывает правильное значение.


Название: Re: Передача изображения
Отправлено: popper от Января 29, 2014, 20:50
Может, проблема в QDataStream::ByteOrder


Название: Re: Передача изображения
Отправлено: lesav от Января 30, 2014, 06:24
А зачем использовать QPicture pic; ???
Используй QFile.open и QFile.read.


к тому-ж не будет зависимости от GUI  т.к. использование QPicture требует наличия плагинов plugins/imageformats/*.*
И главное,  можно будет передавать любой файл запрошенный  GETом


Название: Re: Передача изображения
Отправлено: Fregloin от Января 30, 2014, 22:32
и лучше использовать  QNAM для вашей цели