Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Сети > UDP протокол |
Автор: Xsander 16.6.2006, 03:49 | ||
Всем доброго времени суток!!! Столкнулся с такой проблемой, нужно переслать пакета данных на все ПК в сети по UDP протоколу. В принципе, я ее решил вот таким образом:
Со стороны получателя, использую компоненты Indy UDP Server Все это работает, но... В сети существуют подсети, например, 10.9.5.1 и 10.3.2.1 Если посылать пакет с ПК находящегося в подсети 10.9.5.1, то этот пакет получают только ПК из этой подсети, ну и аналогично для других подсетей. Так вот суть вопроса, мне нужно посылать и получать пакеты во всех подсетях, как победить эту заразу??? Помогите, плиз. |
Автор: Snowy 16.6.2006, 10:08 |
Так уж устроен протокол UDP. Он отправляет пакеты только в одну подсеть. Чтобы отправлять в две подсети, нужно выполнять отправку 2 раза. Чтобы указать, в какую подсеть отправлять, нужно привязать сокет к нужному сетевому адаптеру при помощи функции bind. Без такой привязки винда сама будет выбирать в какую подсеть слать. Что в твоём случае и происходит. Добавлено @ 10:11 ЗЫ. Если компьютер находится только в одной подсети, а слать нужно в разные, то в сети должна быть настроена маршрутизация UDP между подсетями. А у Вас похоже, маршрутизируется только TCP. Добавлено @ 10:12 Если настроить маршрутизацию нет возможности, то нужно, чтобы программа, установленная на компьютере с двумя интерфейсами, при получении пакетов, отсылала бы их копию в другую подсеть. |
Автор: Mechanic 16.6.2006, 10:37 |
Если на роутерах не фильтруются Broudcast пакеты тогда Должно работать Иначе Не лечится. ![]() Только multicast посылки.. |
Автор: Xsander 16.6.2006, 10:56 | ||
Т.е. передавать пакет по цепочке, а если подсетей много? Как программа узнает, в какую именно подсеть отправить копию пакета. Конечно, можно предусмотреть возможность отправки копий пакета во все подсети сразу и ждать ответа. |
Автор: Snowy 16.6.2006, 11:25 |
Если подсетей много, то нужно настраивать маршрутизацию UDP или отказываться от броадкаста. |
Автор: DCoder 17.6.2006, 08:22 |
У меня, кстати, тоже вопрос по Indy UDP. Почему по интернету пакеты не доходят, если даже я не пользуюсь броадкастом? |
Автор: Snowy 18.6.2006, 11:02 |
Маршрут не находят. Некоторые провайдеры вообще не верят в существование UDP. Настраивают только TCP. Хотя иногда есть и плюсы. Бывает, что UDP идёт, а провайдер его не считает... Можно гигабайты прокачать по UDP - на стоимость это никак не падает. Халява. |
Автор: OvsInc 18.6.2006, 19:00 | ||
По-моему не в тему. Xsander говорит о локальной частной сети с двумя подетями. Связь между ними обеспечивает маршрутизатор. При чем тут провайдеры? На маршритизаторе обязательно стоит брандмауэр (или прокси), а в его политика проста до безобразия (что не надо не пускать) и обусловлена потребностями сети (напимер, стандартный набор - FTP (21 TCP порт), WWW (80 TCP), NetBIOS (137 TCP UDP,138 TCP UDP,139 TCP UDP), DNS (55 UDP)). Так что выход - один использовать либо стандартный порт, либо договариваться с админом. |
Автор: Mechanic 18.6.2006, 19:32 | ||
В этом случае роутер ведь не делает разницы между TCP и UDP пакетами? Роутится ведь сам IP, независимо от того, что на него понавешано. ![]() Почему же тогда под TCP маршруты находятся, но под UDP нет? Конечно, имеется в виду ситуация, когда UDP-таки ходит. ![]() |
Автор: DCoder 19.6.2006, 07:59 |
Но, если я не ошибаюсь, интернет-радио работает на UDP. Как же в этом случае пакеты всегда "находят маршрут"? |
Автор: Mechanic 19.6.2006, 08:07 |
Ошибаешься. Оно работает на прямом TCP/IP туннеле. ![]() |
Автор: DCoder 19.6.2006, 08:11 |
И что это значит? ![]() |