QTcpServer / QTcpSocket: использование QDataStream вместо прямой отправки данных UTF-8 - PullRequest
0 голосов
/ 04 сентября 2018

Я собираюсь написать небольшой сервер, используя QTcpServer, который предназначен для подключения через e. г. клиент Telnet. Будет отправлен только текст.

Пример сервера cookie удачи Qt использует QDataStream для отправки текста через следующий код, используя QTcpSocket:

QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_10);
out << "Some Text";
socket->write(block);

Если кто-то не хочет отправлять двоичные данные, есть ли какой-либо недостаток для прямой отправки данных Unicode (все участники знают, что мы используем UTF-8) примерно так:

socket->write(QString::fromUtf8("Some text").toUtf8);

1 Ответ

0 голосов
/ 04 сентября 2018

Нет недостатков в прямой отправке данных UTF-8, но вам нужно иметь некоторые средства разделения пакетов (единиц) данных на принимающей стороне. Если это весь текст, это можно сделать, разбив входящие данные на строки на приемном конце. QDataStream не заботится ни о чем из этого и на уровне канала отправляет 32-битную длину отправленной строки байтов, за которой следуют эти байты. Таким образом, никогда не возникает двусмысленности относительно длины полезной нагрузки пакета, независимо от его содержимого: он может быть даже длиной 0 байт.

...