2010-03-16 4 views
8

Я пишу библиотеку сервера FTP (потому что мне это нужно, и я не могу найти хорошие решения для этого) в C# и у меня есть два вопроса:Найти свободный порт

  • Как работает IPEndPoint найти свободный порт, когда я делаю new IPEndPoint(IPAddress.Any, 0), например?

  • Можно ли найти свободный порт из диапазона (например, от 1023 до 65535), без метод GetActiveTcpConnections? Потому что он медленный - мне нужен более быстрый способ сделать это.

+1

Возможный дубликат [Найти следующий TCP-порт в .Net] (http://stackoverflow.com/questions/138043/find-the-next-tcp-port-in-net) –

ответ

13

Как только вы начинаете слушать на незанятый порт (0), то он будет назначен операционной системой (или, точнее, в/стек TCP IP). Поскольку стек управляет всеми портами, он может назначить бесплатный.

Так что просто начните слушать свое соединение, а затем проверьте порт в свойстве LocalEndpoint, чтобы передать его клиенту. TcpListener documentation содержит дополнительную информацию об этом.

Если вам нужно найти бесплатный в диапазоне, вам просто нужно пройти весь диапазон и попытаться начать прослушивание на каждом из них. Если вам это удастся, вы нашли свободный порт, и вы можете выйти из цикла; если нет, просто продолжайте цикл. Это единственный надежный способ сделать это, потому что в противном случае вы можете столкнуться с состоянием гонки с другими процессами или даже с вашими потоками, которые оценивают один и тот же свободный порт, а первый - «выигрывает», в то время как другой код не будет способный использовать порт.

 Смежные вопросы

  • Нет связанных вопросов^_^