Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как проверить достоверность полученных данных 
:(
    Опции темы
grg
Дата 27.8.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.11.2008

Репутация: нет
Всего: нет



Здравствуйте,
задача достаточно простая, но в сокетах только начинаю разбираться, подскажите правильное ли направление.

Сама задача: есть сервер на котором крутится бесконечный цикл, сервер опрашивает несколько клиентов(1-10) подключенных по сети, получает от них структуры данных динамической длины, использует данные в расчетах, также время от времени отправляет некоторые данные обратно клиентам. Все это крутится в локальной сети, обмен по протоколу tcp.
Данные представляют собой набор числовых и строковых значений произвольного размера.
Цикл не должен затыкаться на обмене с клиентами - я так понимаю надо копать в сторону асинхронных сокетов.

Вопросы: 

Каким образом удостоверится в приеме корректного(полного) блока данных?
В манах написано, что при чтении или записи в сокет нет гарантии , что данные полностью будут отправлены или получены, собственно для того, чтобы удостовериться в получении цельного блока данных по сети (не зная на принимающей стороне точного размера блока данных), предполагаю надо создать структуру из магического числа+ (размер блока данных+)сами данные +чексумма+магическое число и на принимающей стороне сделать парсер выдергивающий из этого  блок данных и далее делать с ним, что необходимо? 

Как лучше организовать передачу данных, не блокируя основной цикл? в отдельном потоке?
Если для отправки  организовать цикл, который вызывает send до тех пор, пока не отправится весь блок данных, он ведь заблокирует работу основной программы независимо от асинхронности сокетов так как ждет результата команды send? 

Есть ли пример неблокирующей передачи xml структуры(в принципе любой строки) с проверкой достоверности получения с одного сокета на другой? 
Для самообразования)

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

Заранее спасибо

PM MAIL   Вверх
Abyx
Дата 27.8.2010, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



grg, вы не так поняли маны. TCP гарантирует что если соединение не оборвалось, то данные будут переданы целиком и без изменений.
Однако возможно что за 1 вызов функции recv или send будет передана только часть данных, а другие части при последующих вызовах.
PM MAIL   Вверх
grg
Дата 27.8.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.11.2008

Репутация: нет
Всего: нет



спасибо. Просто не верилось, что получатель получит сигнал о приходе любого блока данных, только когда придет весь объем информации от отправителя, удобно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.