Russian Qt Forum
Апрель 26, 2024, 20:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с отправкой изображений по TCP [РЕШЕНО]  (Прочитано 2504 раз)
Денис
Гость
« : Сентябрь 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, он считает что поступающий массив в другой кодировке !
Как побороть этого беса, подскажите плз ?  Плачущий
« Последнее редактирование: Сентябрь 19, 2014, 13:46 от Денис » Записан
vizir.vs
Гость
« Ответ #1 : Сентябрь 19, 2014, 13:19 »

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

Не совсем ясно как кодировка влияет на изображение. А можно код приема данных? А лучше минимальный тестовый пример по пересылке данных.

Код приема данных через обычный браузер localhost:33333/modifed (modifed - просто вид запроса), браузер обращается по данному порту, соединение проходит, и изображение он считывает, но не коректно почему-то.  Подмигивающий
Записан
Денис
Гость
« Ответ #3 : Сентябрь 19, 2014, 13:44 »

Не совсем ясно как кодировка влияет на изображение. А можно код приема данных? А лучше минимальный тестовый пример по пересылке данных.

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

Проблема решена, нужно чтоб избавиться от проблем с кодировкой, открыть поток QDataStream os(clientSocket)) ))
Все как всегда, очень просто  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 20.