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