c#确定火灾方式来检测港口使用情况

时间:2010-06-23 12:44:38

标签: c# tcp c#-4.0 localhost

最近一直在这里来回。尝试使用Putty将SSH隧道从我的计算机上的localhost端口连接到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?

2 个答案:

答案 0 :(得分:3)

如果您正在检查一个程序并希望在另一个程序中使用该端口,则始终存在竞争条件。如果您在一个程序中执行所有操作您可以创建一个套接字并绑定到端口0,系统将为您选择一个空闲端口,这样您就不会与另一个进程冲突。

答案 1 :(得分:1)

好吧,因为你不关心竞争条件。

尝试将()套接字()绑定到通配符IP地址(0.0.0.0)上的端口。如果成功,没有人拥有该端口。 (当然,现在你有了端口,所以不要忘记关闭它。)