c# Sure Fire 检测端口使用情况的方法

标签 c# tcp c#-4.0 localhost

最近一直在讨论这个问题。尝试使用 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/

相关文章:

c# - 在 Windows 服务中的 timer_elapsed 事件处理程序中使用异步等待

c# - 如何将 TypeConverter 与 ConfigurationSection 一起使用?

c# - 如何在 TCP 客户端中读取未知数据长度

所有其他应用程序上的 C# 气球通知弹出窗口

c# - uint 中的按位移位

asp.net - 在 Response.End() 之后从代码后面调用 JavaScript 函数

c# - 使用 Autofac 在 Azure Functions 启动类中未解析 ILogger<T>

c# - MVC 4 @Html.DropDownListFor() 没有将模型值传递给下拉列表

sockets - 带多宿主的 SCTP 作为 TCP 的直接替代

c - Linux C stream socket中的TCP机制