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