c# - 寻找自由港

标签 c# .net sockets port

我正在用 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/

相关文章:

c# - ServiceStack:AppHost 不支持通过单例访问当前请求

带有 SSL 错误的 Python3 套接字编程?

c++ - 使与 IPv6 或 IPv4 的连接变得容易?

c# - 如何使用 .net 制作 Facebook 应用程序

c# - 可以使用 DeflateStream 或 GZipStream 压缩未压缩的文件吗?

.net - POCO 是什么意思?

unix - AF_UNIX 域 - 为什么只使用本地文件名?

c# - 在不使用服务引用的情况下创建异步 WCF 客户端

c# - 在时间段内激活

.net - 具有自动滚动功能的 Windows.Forms.Panel 中的控制位置