我正在编写一个FTP服务器库(因为我需要它,而且我找不到任何好的解决方案)在C#中我有两个问题:
例如,当我IPEndPoint
时,new IPEndPoint(IPAddress.Any, 0)
如何找到空闲端口?
是否可以在某个范围内找到一个空闲端口(例如从1023到65535),没有 GetActiveTcpConnections
方法?因为它很慢 - 我需要一种更快的方法来做到这一点。
答案 0 :(得分:13)
一旦开始侦听未分配的端口(0),它将由操作系统(或更确切地说,由TCP / IP堆栈)分配。由于堆栈管理所有端口,因此可以分配一个免费端口。
因此,只需开始侦听您的连接,然后检查LocalEndpoint属性中的端口以将其传递给客户端。 TcpListener documentation包含有关此内容的更多信息。
如果你需要在一个范围内找到一个免费的,你只需要在整个范围内循环并尝试开始聆听每一个。如果你成功了,你找到了一个自由端口,你可以退出你的循环;如果没有,只需继续循环。这是唯一可靠的方法,因为否则你可能会遇到与其他进程甚至是你的线程的竞争条件,它们都评估相同的自由端口,第一个使用它“wins”,而其他代码不会能够使用该端口。