获取随机可用TCP端口号(C#)

获取随机可用TCP端口号(C#)

最近开启MQTT服务,需要获取随机可用的TCP端口号,需要两步:

  • 通过System.Net.NetworkInformation中的GetIPGlobalProperties,获取所有可用的端口号;

    /// <summary>
    /// 获取所有可用的TCP端口
    /// </summary>
    /// <param name="startPort"></param>
    /// <returns></returns>
    public static List<int> GetAllAvailableTCPPort(int startPort = 1000)
    {
        //提供本地计算机有关网络连接信息
        IPGlobalProperties iPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
        //获取可用的TCP监听终结点信息
        IPEndPoint[] iPEndPoints = iPGlobalProperties.GetActiveTcpListeners();
        return iPEndPoints.Where(q => q.Port >= startPort && q.Port <= MaxPort).Select(q => q.Port).ToList();
    }
    
  • 采用随机数的方法,判断特定范围(1024, 65535)的可用端口。

    /// <summary>
    /// 获取随机可用端口号
    /// </summary>
    /// <returns></returns>
    public static int GetRandomPort()
    {
        List<int> portList = new List<int>();
        portList = GetAllAvailableTCPPort();
    
        int port = 0;
        bool IsRandomOK = true;
        Random random = new Random((int)DateTime.Now.Ticks);
        while (IsRandomOK)
        {
            port = random.Next(1024, 65535);
            IsRandomOK = portList.Contains(port);
        }
        return port;
    }
    
    // 设置最大端口号
    private const int MaxPort = 65535;
    
posted @   Logan1418  阅读(448)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示