![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Norrius |
![]()
Сообщение
#11
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо всем за ответы, буду изучать сериализацию и маршалинг.
|
|
|
Norrius |
![]()
Сообщение
#12
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Хм, похоже, был откат форума. Что ж, нужно все-таки написать решение) Я использовал QDataStream и переопределенные операторы ввода и вывода вида
QDataStream &operator>>(QDataStream & s, tile &t); QDataStream &operator<<(QDataStream & s, const tile &t); |
|
|
ViGOur |
![]()
Сообщение
#13
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Угумс, снова посыпалась БД.
|
|
|
Norrius |
![]()
Сообщение
#14
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Еще один небольшой вопрос: если когда испускается сигнал readyRead() сделать вот так:
То будет ли получена из потока вся информация, которая была отправлена с другой стороны? Или только та, что уже пришла? Иначе говоря, будет ли readyRead() вызван, когда данные начинают приходить или когда заканчивают? Из нескольких мегабайт, что я пытаюсь переслать, доходит и обрабатывается только первый кусок неопределнной длины, и я не уверен, в чем тут прикол. |
|
|
iReset |
![]()
Сообщение
#15
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 178 Регистрация: 6.6.2012 Пользователь №: 3414 Спасибо сказали: 23 раз(а) Репутация: ![]() ![]() ![]() |
...будет ли получена из потока вся информация, которая была отправлена с другой стороны? Или только та, что уже пришла? Иначе говоря, будет ли readyRead() вызван, когда данные начинают приходить или когда заканчивают? Сигнал посылается, как только появляется новая порция данных. QIODevice ничего не знает о том объёме данных, которые нужны принимающей стороне. Новая порция - один сигнал. Информацию о доступном количестве байт можно получить функцией bytesAvailable(). Если данных недостаточно, можно просто их не читать и дождаться ещё одного сигнала. Прочитать порцию нужного размера можно, когда она полностью попадёт в буфер. |
|
|
Norrius |
![]()
Сообщение
#16
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Информацию о доступном количестве байт можно получить функцией bytesAvailable(). Если данных недостаточно, можно просто их не читать и дождаться ещё одного сигнала. Ага, хорошо. Но что если есть разные пакеты? Есть пакет, начинающийся с (byte)0x01, длиной 45 байт, а пакет, что начинается с (byte)0x02, имеет длину 3145737 байт (или 2621448, никак точно не измерю). Плюс планируются пакеты, длина которых будет варьироваться... Может быть, это в принципе неправильный способ передачи для такой ситуации?) |
|
|
Norrius |
![]()
Сообщение
#17
|
Студент ![]() Группа: Участник Сообщений: 26 Регистрация: 30.12.2011 Пользователь №: 3105 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо, вроде бы получилось.
|
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 7.4.2025, 8:57 |