У меня есть приложение, которое должно передавать и получать через один и тот же порт. Это может произойти в двух случаях:
Где ПК общается с удаленным оборудованием. Он «отвечает отправителю», поэтому датаграммы возвращаются на мой компьютер через порт отправки.
Когда компьютер разговаривает сам с собой (режим обратной связи) для тестирования и демонстрации (тестовое приложение передает поддельные данные в наше основное приложение через UDP).
Это только сбой при попытке добиться обратной петли. Единственный способ заставить его работать, это убедиться, что ресивер настроен первым - то, что я не могу гарантировать.
Может ли кто-нибудь помочь сузить мой поиск, предложив «правильный» способ реализации UdpClient (ов) для надежной обработки вышеуказанных ситуаций?
(Единственное решение, которое я нашел для надежной работы с удаленным оборудованием, - это использование одного UdpClient в двух направлениях, хотя я работаю с устаревшим кодом, который может влиять на это обнаружение. Я пытался использовать два UdpClients, но они наступают друг другу на ноги - В некоторых случаях, когда один клиент запущен, другой клиент не может подключиться. С помощью ExclusiveAddressUse / ReuseAddress, настроенного для обеспечения общего доступа к портам, я могу почти заставить его работать, кроме Приемник должен начать сначала)
1020 * редактировать *
Для уточнения:
Мы общаемся с внешним оборудованием через UDP. Когда он получает от нас сообщение, он отвечает на адрес источника, поэтому мы получаем сообщения обратно на тот же порт. Эта часть работает нормально.
Однако, если я попытаюсь эмулировать внешнее оборудование с помощью обратной связи (т.е. я отправляю и получаю через один и тот же порт «себе»), я могу получать дейтаграммы только в том случае, если я начинаю получать до того, как начну передачу. Это прекрасно работает - но если я передаю, а затем пытаюсь получить, я никогда не получаю никаких данных. То, что я на самом деле пытаюсь отправить, в данном случае не имеет значения.
Итак, у меня две проблемы:
1) Как надежно работать с обратной связью.
2) Как это сделать (1), не прерывая внешнюю связь, которая в настоящее время работает нормально!
Поскольку я попробовал все виды комбинаций 1 или 2 UdpClients и множество различных настроек (безрезультатно), мне просто стало интересно, удалось ли кому-нибудь заставить петлю UPD работать хорошо, поскольку это может дать мне привести к решению, которое я могу работать во всех случаях.
Спасибо, что нашли время подумать об этом ...