Ошибка 10057 при попытке отключить UdpClient

Я пытаюсь создать простой UDP-сервер с помощью одного UdpClient, он работает нормально с первым соединением, но если другой IP-адрес отправляет что-то на тот же порт, который прослушивается, игнорируется, потому что, насколько я знаю, сокет подключен к другому удаленному IP

MyUdpClient.Connect(RemoteIpEndPoint)
MyUdpClient.Send(Encoding.ASCII.GetBytes(ACK), ACK.Length)

Итак, после отправки ACK я добавляю строку для отключения от удаленного клиента, чтобы продолжить прослушивание.

MyUdpClient.Client.Disconnect(True)

Но я получаю сообщение об ошибке 10057. «Запрос на отправку или получение данных был запрещен, поскольку сокет не подключен…».

Что странно, так как удаленный клиент получает все данные в порядке, я не понимаю, что происходит, что пытается отправить?

Есть ли способ узнать, когда я могу отключиться от текущего удаленного клиента?

Что мне нужно сделать, так это ответить ACK на каждый пакет и отправить случайные данные на последний удаленный IP-адрес, который что-то отправляет на сервер.

У меня есть больше кода, но он немного длинный, если вам это нужно, дайте мне знать.


person E_Blue    schedule 19.12.2016    source источник


Ответы (1)


UDP — это протокол без установления соединения, в отличие от TCP. Следовательно, вы не можете отключить UDP-клиент, поэтому ошибка верна (хотя и несколько вводит в заблуждение).

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

person JvO    schedule 20.12.2016
comment
Я это знаю, но почему методы Connect и Disconnect внутри UdpClient существуют? - person E_Blue; 20.12.2016
comment
Вероятно, потому, что они определены в базовом классе (все эти классы типа сокета обычно происходят от общего класса сокета). Тот факт, что эти функции существуют, не всегда означает, что они могут делать что-то полезное. - person JvO; 20.12.2016