当前位置:  开发笔记 > 编程语言 > 正文

找一个免费的港口

如何解决《找一个免费的港口》经验,为你挑选了1个好方法。

我正在编写一个FTP服务器库(因为我需要它,我找不到任何好的解决方案)在C#中我有两个问题:

例如,IPEndPoint当我这样做时new IPEndPoint(IPAddress.Any, 0),如何找到一个免费端口?

是否有可能找到从一系列自由港(例如,从1023到65535),没有GetActiveTcpConnections方法是什么?因为它很慢 - 我需要一种更快的方法来做到这一点.

Lucero.. 15

一旦您开始侦听未分配的端口(0),它将由操作系统(或更确切地说,由TCP/IP堆栈)分配.由于堆栈管理所有端口,因此可以分配一个免费端口.

因此,只需开始侦听您的连接,然后检查LocalEndpoint属性中的端口以将其传递给客户端.该 的TcpListener文件包含有关它的更多信息.

如果你需要在一个范围内找到一个免费的,你只需要在整个范围内循环并尝试开始收听每个范围.如果你成功了,你找到了一个自由端口,你可以退出你的循环; 如果没有,只需继续循环.这是唯一可靠的方法,因为否则你可能会遇到与其他进程甚至是你的线程的竞争条件,它们都评估相同的自由端口,第一个使用它"wins",而其他代码不会能够使用该端口.



1> Lucero..:

一旦您开始侦听未分配的端口(0),它将由操作系统(或更确切地说,由TCP/IP堆栈)分配.由于堆栈管理所有端口,因此可以分配一个免费端口.

因此,只需开始侦听您的连接,然后检查LocalEndpoint属性中的端口以将其传递给客户端.该 的TcpListener文件包含有关它的更多信息.

如果你需要在一个范围内找到一个免费的,你只需要在整个范围内循环并尝试开始收听每个范围.如果你成功了,你找到了一个自由端口,你可以退出你的循环; 如果没有,只需继续循环.这是唯一可靠的方法,因为否则你可能会遇到与其他进程甚至是你的线程的竞争条件,它们都评估相同的自由端口,第一个使用它"wins",而其他代码不会能够使用该端口.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有