QDataStream Символ завершения readSlot - PullRequest
0 голосов
/ 11 апреля 2011

на данный момент мой разговор с сокетом основан на тексте.Все мои разговоры заканчиваются на ;, а некоторые разговоры являются двоичными.теперь я решил сделать все мои разговоры бинарными.и я хочу использовать QDataStream в качестве оболочки оболочки.так, какие меры я должен принять вместо ; использования.

например, я использовал для проверки ; в конце.когда readyRead был выпущен.теперь я думаю, что я положу размер буфера в начале буфера.но проблема в том, когда я получаю какой-то неполный буфер.можно разобрать размер?

1 Ответ

0 голосов
/ 11 апреля 2011

Neel, я бы порекомендовал вам следующее: QDataStream имеет удобные перегруженные операторы >> и операторы <<. В этом случае я обычно определяю размер данных, например, первые 4 байта потока. А на другом конце я <em>ожидаю, что эти 4 байта будут прочитаны, чтобы определить весь размер данных.

Например, некоторый псевдокод (стиль C ++, но он просто дает представление о том, что вам нужно, а не на 100% отточенный и рабочий код):

QByteArray myData = getData();
QDataStream ds(&socket);

ds << myData.size();
// Note: here your data will be encoded and be '\0' terminated
ds << myData.constData(); 

// so you might want to consider this call
// although since Qt doesn't guarantee exactly myData.size bytes to be written
// its your responsibility to check whether everything is written
ds.writeRawData(myData.constData(), myData.size());

Теперь, если вы используете QByteArray или любой из типов Qt, которые можно отправлять через QDataStream, вы можете воспользоваться преимуществами того, что уже реализовано в Qt, и отправлять свои данные так же просто, как:

QByteArray myData = getData();
QDataStream ds(&socket);
ds << myData;

В этом случае просто проверьте здесь http://doc.qt.nokia.com/4.7/datastreamformat.html того, как Qt записывает QByteArray в QDataStream. Более того: если у вас есть QDataStream на втором конце, все, что вам нужно сделать, это просто прочитать ваши данные так же легко, как вы их написали.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...