Вторник, 24 Декабря 2024, 04:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Асинхронная прием передача через сокеты
RangerДата: Среда, 13 Ноября 2013, 10:51 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Добрый день коллеги.

сервер отправляет клиенту пакеты посредством MySocket.BeginSend.
клиент получает пакеты через BeginReceive.
по получению пакета, он его десериализует в класс и снова BeginReceive.

Такой вопрос:
если сервер отправляет пакеты в последовательности 1,2,3.

1. Клиент точно получит в такой же последовательности, или может быть 2,1,3 или 3,1,2.?

2. Что произойдет, если будет перебой связи, клиент "затупит" с обработкой пакета?
Пакеты дойдут или что-то потеряется?

Спасибо..




Сообщение отредактировал Ranger - Среда, 13 Ноября 2013, 10:51
froexДата: Среда, 13 Ноября 2013, 11:02 | Сообщение # 2
Руководитель Froexilize team
Сейчас нет на сайте
Цитата Ranger ()
Клиент точно получит в такой же последовательности, или может быть 2,1,3 или 3,1,2.?

При отправке несколькими пакетами порядок получения не известен.
Цитата Ranger ()
Что произойдет, если будет перебой связи, клиент "затупит" с обработкой пакета? Пакеты дойдут или что-то потеряется?

При использовании TCP соединения будет возвращена ошибка, если пакет не дошёл и можно будет повторить попытку отправки пакета.
При использовании UDP соединения статус пакета не отслеживается.
Почитай про разницу между TCP и UDP. Также почитай про chunked transfer encoding (это с области HTTP, но для других протоколов тоже есть аналогии).


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.
RangerДата: Среда, 13 Ноября 2013, 11:12 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Цитата froex ()
При использовании TCP соединения будет возвращена ошибка, если пакет не дошёл и можно будет повторить попытку отправки пакета.

Да, забыл уточнить. Протокол TCP.

Цитата froex ()
При отправке несколькими пакетами порядок получения не известен.

А что значит несколькими пакетами?
асинхронная отправка следующего не дожидаясь callback по отправке предыдущего?




Сообщение отредактировал Ranger - Среда, 13 Ноября 2013, 11:15
froexДата: Среда, 13 Ноября 2013, 11:22 | Сообщение # 4
Руководитель Froexilize team
Сейчас нет на сайте
Цитата Ranger ()
А что значит несколькими пакетами? асинхронная отправка следующего не дожидаясь callback по отправке предыдущего?

Я имел ввиду, что ты вручную разобьёшь на куски данные, которые собираешься отправить, а потом для каждого из них вызовешь Send.
Вообще, если правильно объяснять, почти каждое сообщение может быть разбито автоматически на несколько пакетов. Допустим, отправляешь 8к байт, а они разбиваются по, грубо говоря, 0.5к байт и отправляются. На принимающем устройстве все эти пакеты снова собираются воедино, что гарантирует правильную целостность данных. При разбивании большого сообщения вручную собирать порядок тоже придётся вручную. При использовании TCP соединения, если хотя бы одна порция разбитого сообщения не дойдёт до адресата (допустим, истекает таймаут, либо достигнут предел количества узлов), сообщение целиком считается не доставленным.


Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее.
Алгоритмы, программирование, оптимизация, тестирование, ведение проектов.
Ищу художника, дизайнера, тестера, программистов С и С++
Обучаю процессам разработки и программированию.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг