#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));