Удалить привязку IPEndPoint

#c#

#c#

Вопрос:

У меня есть небольшая форма (FORM2), которая действует как всплывающее окно. Он принимает IPAddress в качестве аргумента и подключается к нему. Приведенный ниже код показывает соединение

 myNewUDP.newUDPClient = new UdpClient();
myNewUDP.newEP        = new IPEndPoint(IPAddress.Parse("255.255.255.255"), PORT);
IPEndPoint newBindEP  = new IPEndPoint(IPAddress.Any, PORT);

//Set port to listen to
myNewUDP.newUDPClient.Client.Bind(newBindEP);                                    
  

Когда я вызываю всплывающее окно в первый раз, оно правильно подключается к устройству. Однако во время последующих вызовов он выдает исключение «разрешено только одно использование каждого адреса сокета «. Как я могу решить эту проблему? Есть ли способ закрыть привязку IP и порта?

Ответ №1:

Подключение будет означать подключение к какой-либо другой конечной точке. Здесь вы привязываете, что означает, что вы резервируете протокол / порт / ip для себя. Чтобы удалить вызов привязки Close() в сокете.

Вы также используете UdpClient немного странно, поскольку вы вызываете непосредственно Bind() из базового сокета. Тогда вы могли бы просто использовать обычный Socket . Или вы можете использовать фактический UdpClient для обработки всего.

Комментарии:

1. Когда я вызываю свое всплывающее окно во второй раз, сообщение не передается. Простое закрытие UdpClient решит эту проблему?

2. Я пытался выполнить myNewUDP.newUDPClient. Close() во время события закрытия form2, но по-прежнему выдает ту же ошибку.

3. @Abin А как насчет myNewUDP.newUDPClient.Client.Close() того, что вы напрямую подключаетесь к базовому сокету?

4. Когда я делаю это, я получаю другое исключение при моем ответном вызове receive о недоступности ресурса. NewUdpState MynewUDP = (NewUdpState)ar. AsyncState; //Получаем сообщение udp ReceiveString = Encoding. ASCII. Получить строку(MynewUDP.newUDPClient.EndReceive (ar, ссылка на MynewUDP.newEP));