| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > udp с подтверждением доставки |
| Автор: JohnnyQ 30.3.2009, 18:21 | ||||||||
| Добрый день! Есть клиент-сервер на UDP. Нужно организовать подтверждение доставки. отправка:
и прием
Хочу сделать, чтобы все отправляемые пакеты нумеровались. Суть вопроса, номер пакета нужно отправлять в buf или есть способ передать номер пакета другим образом (можно ли передавать не
структуру struct в которой будут храниться
|
| Автор: vinick 30.3.2009, 19:32 | ||
ИМХО слишком большие датаграммы. Где-то я читал, что в реальности пакеты свыше 4кб большинством роутеров будут отброшены. Источник к сожалению не помню. По сабжу - да можно.
только следи за порядком байт в номере |
| Автор: Anikmar 30.3.2009, 19:37 | ||
Так в случае чего IP пакеты порежет как надо, а там соберет. |
| Автор: JohnnyQ 30.3.2009, 20:36 | ||||||
ок! отправить мы можем, а принять данные как структуру реально??? например:
|
| Автор: SVN74 30.3.2009, 20:46 | ||
Да, создается не прерывный цикл до нужного заполнения (по размеру структуры) |
| Автор: vinick 30.3.2009, 20:47 | ||||
Да именно так, только помни про выравнивание и про порядок байт. Если будет что собирать. Насколько я понял - для UDP фрагментация нежелательна. Добавлено через 4 минуты и 51 секунду
Разве для UDP это имеет смысл? |
| Автор: SVN74 30.3.2009, 20:58 |
Имеет, если надо отправлять маленькими пакетами ,а именно так и надо делать... |
| Автор: JohnnyQ 30.3.2009, 20:59 |
| ок! всем спасибо!!! буду пробывать!!! |
| Автор: Anikmar 31.3.2009, 08:35 | ||
По моему по барабану. UDP транспортный уровень и он ничего не знает о фрагментации собственно IP пакетов - это реализуется более низким IP протколом. Он будет фрагментировать как нужно для разных сегментов сети. И на качество собственно UDP это не должно отражаться - IP гарантирует сборку пакета UDP на приемнике в том виде, в каком он ушел с передатчика, если конечно он (пакет) до приемника дойдет. Если не все соберется - пакет просто будет отброшен. Существуют, конечно, варианты, когда складываются неблагоприятные условия (например, пакет режется на две части, а во второй только пара байт информации). Но ИМХО - жестко подгонять размер передаваемого блока достаточно хлопотно. Можно в протоколе предусмотреть увеличение/уменьшение кадра в зависимости от условий передачи. Мы заранее не знаем какой размер кадра у принимающей стороны будет и в промежуточных узлах. (Хотя это можно выяснить, конечно). Я встречал в разных источниках разные рекомендации: 4 кб (достаточно устаревшая рекомендация на мой взгляд) 16 Кб (вроде как для большинства сетей оптимальна) 64 Кб (чаще всего встречал в последнее время. И кажется буфер виндовых сокетов именно такого размера по умолчанию, не проверял). А вот дойдет собственно пакет UDP до получателя или нет - это уже никто не знает. И сколько времени он будет блуждать (возможно следующий пакет придет раньше предыдущего). Другое дело при ненадежных каналах связи повторная отправка 64К все-таки более рессурсоемка. Поэтому от четких рекомендаций я воздержусь - слишком мало у меня опыта. |