我正在用 C# 编写一个 FTP 服务器库(因为我需要它,但我找不到任何好的解决方案),我有两个问题:
如何IPEndPoint
当我这样做时找到一个自由港new IPEndPoint(IPAddress.Any, 0)
, 例如?
是否可以从一定范围(例如从 1023 到 65535)中找到空闲端口,without the GetActiveTcpConnections
方法?因为它很慢 - 我需要一种更快的方法来做到这一点。
一旦您开始侦听未分配的端口 (0),该端口就会由操作系统(或更准确地说,由 TCP/IP 堆栈)分配。由于堆栈管理所有端口,因此它可以分配一个空闲端口。
因此,只需开始侦听您的连接,然后检查中的端口本地端点 http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.localendpoint.aspx属性将其传递给客户端。这TcpListener 文档 http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx包含有关此的更多信息。
如果您需要在某个范围内找到一个免费的,您只需循环整个范围并尝试开始收听每个范围。如果成功,你就找到了一个空闲端口,你可以退出循环;如果没有,则继续循环。这是唯一可靠的方法,因为否则您可能会遇到与其他进程甚至线程的竞争条件,它们都评估相同的空闲端口并且第一个使用它的“获胜”,而其他代码则不会能够使用该端口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)