最近一直在讨论这个问题。尝试使用 Putty 将 SSH 隧道从我的计算机上的本地主机端口附加到可访问 Internet 的 SSH 服务器另一端的内部端口。 Putty 不会检查端口是否可用。在打开 Putty 连接之前,我想验证端口是否空闲。
如果端口可用,它就可以正常工作,但我需要一种可靠的方法来保证在我在代码中检查端口时端口未打开。我用过各种方法,效果都不好。我目前正在使用以下代码:
bool IsBusy(int port)
{
IPGlobalProperties ipGP = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] endpoints = ipGP.GetActiveTcpListeners();
if (endpoints == null || endpoints.Length == 0) return false;
for (int i = 0; i < endpoints.Length; i++)
if (endpoints[i].Port == port)
return true;
return false;
}
我的计算机上安装了 uTorrent。当我尝试使用端口 3390 时,它失败了,因为 uTorrent 正在通过 TCP 监听该端口。有没有办法确保给定端口上根本不使用 TCP?
最佳答案
如果您正在检查一个程序并希望在另一个程序中使用该端口,则始终会出现竞争条件。如果您在一个程序中执行所有操作,您可以创建一个套接字并绑定(bind)到端口 0,系统将为您选择一个空闲端口,这样您就不会与另一个进程发生冲突。
关于c# Sure Fire 检测端口使用情况的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101684/