找一个免费的港口

时间:2010-03-16 17:47:47

标签: c# .net sockets port

我正在编写一个FTP服务器库(因为我需要它,而且我找不到任何好的解决方案)在C#中我有两个问题:

  • 例如,当我IPEndPoint时,new IPEndPoint(IPAddress.Any, 0)如何找到空闲端口?

  • 是否可以在某个范围内找到一个空闲端口(例如从1023到65535),没有 GetActiveTcpConnections方法?因为它很慢 - 我需要一种更快的方法来做到这一点。

1 个答案:

答案 0 :(得分:13)

一旦开始侦听未分配的端口(0),它将由操作系统(或更确切地说,由TCP / IP堆栈)分配。由于堆栈管理所有端口,因此可以分配一个免费端口。

因此,只需开始侦听您的连接,然后检查LocalEndpoint属性中的端口以将其传递给客户端。 TcpListener documentation包含有关此内容的更多信息。

如果你需要在一个范围内找到一个免费的,你只需要在整个范围内循环并尝试开始聆听每一个。如果你成功了,你找到了一个自由端口,你可以退出你的循环;如果没有,只需继续循环。这是唯一可靠的方法,因为否则你可能会遇到与其他进程甚至是你的线程的竞争条件,它们都评估相同的自由端口,第一个使用它“wins”,而其他代码不会能够使用该端口。

相关问题