Определите, слушает ли сервер при использовании udp - PullRequest
1 голос
/ 29 апреля 2011

Параметр: Я хочу написать класс точка-точка Connection, который при использовании не различает сервер и клиент.Первый хост, который вызывает connect(), должен стать сервером, ожидающим подключения клиента, а второй - клиентом, который подключается к серверу.

Для того, чтобы сделать это, метод connect() сначала долженпроверьте сервер прослушивания. a) В первый раз, когда это происходит, сервер не найден, и абонент, вызывающий connect(), начинает прослушивать localhost и настроенный порт для входящего соединения. b) Вторая сторона, вызывающая connect(), также проверяет удаленный хост на заданном порту, распознает сервер и подключается к нему.

Это не слишком сложно при использовании TCP, поскольку TcpClient.Connect()выдает исключение, когда не может быть установлено соединение.Поэтому я знаю, когда я первый.Поскольку я использую только надежную локальную сеть, я хотел использовать UDP, однако.

Моя проблема: Как определить, ожидает ли сокет UDP-сервера поступающих данных.

В идеале я хотел бы использовать асинхронный сетевой API непосредственно после этого.Вместо того, чтобы заниматься прослушиванием тем самостоятельно.

Ответы [ 3 ]

1 голос
/ 29 апреля 2011

С UDP модель связи похожа на сообщение в бутылке: вы знаете, что отправили его, но нет способа узнать, получил ли кто-нибудь его когда-либо.

Вам необходимо вручную установить протокол связи, чтобы определить, прослушивает ли удаленная сторона (например, отправит ли им ответ «Да, я здесь»). Для этого потребуется обе конечные точки для приема дейтаграмм UDP.

1 голос
/ 29 апреля 2011

Как сказали Джон и Эндрю, вы не можете видеть, открыт ли слушатель, но вы можете реализовать протокол пинг-понга. Отправьте пинг при первом подключении, если нет понга, затем настройте его как сервер.
Если вы вернули понг, то это ваш сервер.

0 голосов
/ 29 апреля 2011

Я не думаю, что вы можете проверить сервер прослушивания, если только вы не отправите пакет и не дождетесь ответа.

...