Как узнать номер порта, используемый С# UdpClient?

Я создаю клиент-серверное приложение, используя C Sharp. Сервер использует tcplisener с фиксированным номером порта. клиент подключается к серверу с помощью tcpclient. После подключения и клиент, и сервер обмениваются данными, используя это соединение. Затем приложение создает новое UDP-соединение для отправки и получения сообщений. Поскольку сервер должен принимать несколько подключений от одного клиента, я должен различать каждое соединение с другим портом. Для этого я должен сначала 1. создать на сервере udpclient (автоматически использовать неиспользуемый порт udp на сервере). 2. отправляет клиенту номер порта, используемый сервером udpclient. 3. клиент отправляет данные на сервер, используя указанный номер порта.

Проблема в том, как создать udpclient, где можно узнать номер используемого порта?


person Syaiful Nizam Yahya    schedule 06.11.2010    source источник


Ответы (3)


Вот ответы на мои вопросы.

UdpClient udpClient = new UdpClient(0));
Console.WriteLine("UDP port : " + ((IPEndPoint)udpClient.Client.LocalEndPoint).Port.ToString());

0 в качестве параметра конструктора задайте приложению автоматический поиск свободного порта udp. ((IPEndPoint)udpClient.Client.LocalEndPoint)).Port.ToString() используется для поиска номера порта.

person Syaiful Nizam Yahya    schedule 06.11.2010
comment
К сожалению, по крайней мере в .NET 4.0 система никогда не устанавливает поле Port в сокете UDP. И поскольку это свойство доступно только для чтения, вы также не можете установить его вручную. - person Jesse Chisholm; 25.09.2014
comment
Ой. Я должен был сказать: система не устанавливает порт для сокетов RAW UDP при привязке. это происходит на сокетах DGRAM. - person Jesse Chisholm; 25.09.2014

Я считаю, что вы можете использовать Socket.RemoteEndPoint, чтобы узнать IP/порт клиента, подключенного к серверу (вы знаете свой локальный IP/порт, потому что вы запустили сокет на этом порту, но он также доступен через свойство LocalEndPoint.

Также см. простой пример MSDN UdpClient. о том, как правильно использовать UdpClient.

person mike    schedule 06.11.2010

Я думаю, что вы не можете использовать UdpClient на стороне сервера для достижения своей цели, поскольку у него нет метода Bind для привязки к IPEndPoint.

Для этого вы должны использовать объект Socket, который позволяет вам отслеживать порт для входящих сообщений UDP. Тогда, без сомнения, вы можете сообщить клиенту, какой порт отслеживает сервер.

person Lex Li    schedule 06.11.2010