Задать вопрос
@MrDlop
I love C++

Как передать картинку по socket Java client -> Qt server?

Мне нужно отправить изображение из Android java клиента и получить в Qt сервере.
byte array при непосредственном открытии из qt изображения и при отправке из java https://pastebin.com/d9qUZANg
Но проблема в том что они отличаются и QT не сохраняет файл
Java (пк) клиент (пока тестирую через пк)
ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            ImageIO.write(bufferedImage, "jpg", bos);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        byte[] bytes = bos.toByteArray();
try (
                Socket socket = new Socket("127.0.0.1", 8001);
                OutputStream outputStream = socket.getOutputStream();
                BufferedWriter writer = new BufferedWriter(
                        new OutputStreamWriter(outputStream)
                );
        ) {
            writer.write("file");
            writer.newLine();
            writer.write(Integer.toString(bytes.length));
            writer.newLine();
            for (int i = 0; i < bytes.length; i++) {
                writer.write(String.format("\\x%02X", (bytes[i])));
            }
            writer.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

QT сервер:
QByteArray messageData;
QByteArray data = socket->readAll();
messageData.append(data);
QString filePath = "";
saveByteArrayAsJpg(messageData, filePath); // моя функция которая сохраняет изображение

Если передавать Java -> Java (без преобразования в hex), то всё норм.
Почему это происходит. Разное представление или я неправильно из java передаю?
  • Вопрос задан
  • 128 просмотров
Подписаться 1 Простой 11 комментариев
Решения вопроса 1
@MrDlop Автор вопроса
I love C++
QByteArray messageData;
        while (socket->bytesAvailable(  )) {
            QString qq = socket->readLine();
            qq.remove(qq.size()-2, 2);
            qint32 s = (qq).toInt();
            QByteArray data = QByteArray::number(s, 16);
            qDebug() << data;
            messageData.append(s);
        }

Понял свой недочёт, я работал со строкой, а надо было нормально перейти к числам. Большое спасибо всем за помощь
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы