crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Тема закрытаНачать новую тему
> Передать объект через TCP
Norrius
  опции профиля:
сообщение 26.7.2012, 13:50
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 30.12.2011
Пользователь №: 3105

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо всем за ответы, буду изучать сериализацию и маршалинг.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Norrius
  опции профиля:
сообщение 8.8.2012, 14:44
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 30.12.2011
Пользователь №: 3105

Спасибо сказали: 0 раз(а)




Репутация:   0  


Хм, похоже, был откат форума. Что ж, нужно все-таки написать решение) Я использовал QDataStream и переопределенные операторы ввода и вывода вида
QDataStream &operator>>(QDataStream & s, tile &t);
QDataStream &operator<<(QDataStream & s, const tile &t);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 8.8.2012, 14:50
Сообщение #13


Мастер
******

Группа: Модератор
Сообщений: 3291
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Угумс, снова посыпалась БД.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Norrius
  опции профиля:
сообщение 10.8.2012, 16:25
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 30.12.2011
Пользователь №: 3105

Спасибо сказали: 0 раз(а)




Репутация:   0  


Еще один небольшой вопрос: если когда испускается сигнал readyRead() сделать вот так:
    QDataStream stream(tcpSocket);
    stream.setVersion(QDataStream::Qt_4_8);
    stream >> some_data;

То будет ли получена из потока вся информация, которая была отправлена с другой стороны? Или только та, что уже пришла? Иначе говоря, будет ли readyRead() вызван, когда данные начинают приходить или когда заканчивают? Из нескольких мегабайт, что я пытаюсь переслать, доходит и обрабатывается только первый кусок неопределнной длины, и я не уверен, в чем тут прикол.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
iReset
  опции профиля:
сообщение 10.8.2012, 17:10
Сообщение #15


Участник
**

Группа: Участник
Сообщений: 178
Регистрация: 6.6.2012
Пользователь №: 3414

Спасибо сказали: 23 раз(а)




Репутация:   2  


Цитата(Norrius @ 10.8.2012, 17:25) *
...будет ли получена из потока вся информация, которая была отправлена с другой стороны? Или только та, что уже пришла? Иначе говоря, будет ли readyRead() вызван, когда данные начинают приходить или когда заканчивают?

Сигнал посылается, как только появляется новая порция данных. QIODevice ничего не знает о том объёме данных, которые нужны принимающей стороне. Новая порция - один сигнал. Информацию о доступном количестве байт можно получить функцией bytesAvailable(). Если данных недостаточно, можно просто их не читать и дождаться ещё одного сигнала. Прочитать порцию нужного размера можно, когда она полностью попадёт в буфер.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Norrius
  опции профиля:
сообщение 10.8.2012, 17:33
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 30.12.2011
Пользователь №: 3105

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(iReset @ 10.8.2012, 18:10) *
Информацию о доступном количестве байт можно получить функцией bytesAvailable(). Если данных недостаточно, можно просто их не читать и дождаться ещё одного сигнала.

Ага, хорошо. Но что если есть разные пакеты? Есть пакет, начинающийся с (byte)0x01, длиной 45 байт, а пакет, что начинается с (byte)0x02, имеет длину 3145737 байт (или 2621448, никак точно не измерю). Плюс планируются пакеты, длина которых будет варьироваться... Может быть, это в принципе неправильный способ передачи для такой ситуации?)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Norrius
  опции профиля:
сообщение 10.8.2012, 19:21
Сообщение #17


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 30.12.2011
Пользователь №: 3105

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо, вроде бы получилось.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.1.2020, 17:40