Russian Qt Forum

Qt => Работа с сетью => Тема начата: Денис от Сентябрь 19, 2014, 13:13



Название: Проблема с отправкой изображений по TCP [РЕШЕНО]
Отправлено: Денис от Сентябрь 19, 2014, 13:13
Возникла проблема при отправке данных на сервер, а конкретно изображений ...

Код:
QTcpSocket* clientSocket = (QTcpSocket*)sender();
    int idusersocs=clientSocket->socketDescriptor();
    QByteArray str = clientSocket->readAll();

    //path image
    QString path("D:/Projects Programing/IBM PC/Test ScreenShoot/build-Daemon-Desktop_Qt_5_3_0_MinGW_32bit-Debug/debug/647_png_639.png");
    // Пример отправки ответа клиенту
    QTextStream os(clientSocket);
    QTextCodec *codec = QTextCodec::codecForLocale();
    QByteArray boundary = "Adbfnmhvhdbkiv";

    QFile file(path);
    if (!file.open(QIODevice::ReadOnly))
    {
        qDebug()<<"error read image";
        return;
    }
    QByteArray fileContent = file.readAll();

    QByteArray data = "--" + boundary + "\r\n";
    data += "Content-Disposition: form-data; name=\"data\"; filename=\"647_png_639.png\";\r\n";
    data += "Content-Type: image/png\r\n\r\n" + fileContent + "\r\n";
    data += "--" + boundary + "--\r\n";

    //os.setAutoDetectUnicode(true);
    //os.setCodec(codec);
    os << "HTTP/1.1 200 Ok\r\n"
          "Content-Type: multipart/form-data; charset=\"utf-8\"; boundary=" << boundary << "\r\n" <<
          "Content-Length: " << QString::number(data.size()) << "\r\n" <<
          "Connection: close\r\n" <<
          data << "\r\n";
    clientSocket->waitForBytesWritten();
    //qDebug() << clientSocket->readAll()+"\n\r";
    // Если нужно закрыть сокет
    clientSocket->close();
    // Удалим объект сокета из карты
    SClients.remove(idusersocs);

Проблема в том что изображение приходит, но меньшего размера и при открытии текстовым редактором исходного и принятого видно, что некоторые символы остались без изменения, а вместо большей части '?'
Я подозреваю что проблема в кодировке потока os, он считает что поступающий массив в другой кодировке !
Как побороть этого беса, подскажите плз ?  :'(


Название: Re: Проблема с отправкой изображений по TCP
Отправлено: vizir.vs от Сентябрь 19, 2014, 13:19
Не совсем ясно как кодировка влияет на изображение. А можно код приема данных? А лучше минимальный тестовый пример по пересылке данных.


Название: Re: Проблема с отправкой изображений по TCP
Отправлено: Денис от Сентябрь 19, 2014, 13:24
Не совсем ясно как кодировка влияет на изображение. А можно код приема данных? А лучше минимальный тестовый пример по пересылке данных.

Код приема данных через обычный браузер localhost:33333/modifed (modifed - просто вид запроса), браузер обращается по данному порту, соединение проходит, и изображение он считывает, но не коректно почему-то.  ;)


Название: Re: Проблема с отправкой изображений по TCP
Отправлено: Денис от Сентябрь 19, 2014, 13:44
Не совсем ясно как кодировка влияет на изображение. А можно код приема данных? А лучше минимальный тестовый пример по пересылке данных.

Код приема данных через обычный браузер localhost:33333/modifed (modifed - просто вид запроса), браузер обращается по данному порту, соединение проходит, и изображение он считывает, но не коректно почему-то.  ;)

Проблема решена, нужно чтоб избавиться от проблем с кодировкой, открыть поток QDataStream os(clientSocket)) ))
Все как всегда, очень просто  :)