Может ли Indy TIdUDPSever иметь несколько экземпляров, связанных с одним и тем же портом UDP для прослушивания - PullRequest
0 голосов
/ 28 октября 2011

У меня есть система связи UDP, которая передает сообщения данных по одному порту.Во второй системе я записываю эти сообщения с помощью компонента TIdUDPServer, но это приложение обрабатывает только подмножество сообщений.

Когда я начал писать второе приложение для обработки других сообщений в передаче данных UDP, оно работаетпросто хорошо.Но если я пытаюсь запустить оба приложения одновременно, второе приложение вызывает исключение «Socket Error # 10048 Address уже используется.»

Можно ли переопределить / расширить Indy, чтобы два компонента моглииспользовать тот же UDP-порт для прослушивания?

1 Ответ

2 голосов
/ 28 октября 2011

Оба приложения должны указывать флаг SO_REUSEADDR при открытии соответствующих сокетов.Для инди-компонентов для этой цели есть свойство ReuseSocket.Однако, когда несколько приложений используют один и тот же порт, невозможно контролировать или гарантировать, какое приложение получит какое сообщение.Они НЕ будут получать свои собственные копии одних и тех же сообщений.Если вам нужно это сделать, то вам нужно третье приложение, которое получает исключительно все реальные сообщения и затем перенаправляет их в соответствующее приложение по мере необходимости.В противном случае рассмотрите возможность прослушивания приложениями сетевых карт в случайном режиме для получения необработанных сетевых данных без учета сокетов (однако вы не можете использовать Indy для этого).

...