首页 > 编程语言 >获取随机可用TCP端口号(C#)

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

时间:2022-12-21 17:46:11浏览次数:38  
标签:获取 C# 可用 TCP int port 端口号

获取随机可用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;
    

标签:获取,C#,可用,TCP,int,port,端口号
From: https://www.cnblogs.com/nuan22/p/16996754.html

相关文章

  • 5G NR - RLC协议阅读笔记 - 从LTE到NR的变化
    通过前面的学习,我们已经知道,在NR中,每个PDCPSDU形成PDCPPDU,然后形成RLCSDU,然后组成RLCPDU。由于NR里面去掉了RLC级联功能。一个RLCPDU可能包含一个RLCSDU或一个RL......
  • R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格|附代码数据
    全文链接:http://tecdat.cn/?p=18860最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。时间序列分析是统计学中的一个主要分支,主要侧重于分析数据集以......
  • IfcBooleanChoose
    IfcBooleanChoose功能定义如果为TRUE,则返回第一个选项,否则返回第二个选项。 注:根据ISO/IEC10303-42:1992的定义此函数根据布尔输入参数的值返回两个选项之一。这两......
  • buuoj-pwn-starctf_2019_babyshell
    buuoj-pwn-starctf_2019_babyshell逆向分析GLIBCubuntu16,不涉及内存管理也没啥需要讲的关键函数主函数__int64__fastcallmain(__int64a1,char**a2,char**a3......
  • R语言广义相加模型 (GAMs)分析预测CO2时间序列数据|附代码数据
    全文下载链接:http://tecdat.cn/?p=20904最近我们被客户要求撰写关于GAMs的研究报告,包括一些图形和统计输出。环境科学中的许多数据不适合简单的线性模型,最好用广义相加模......
  • 关于postcss-preset-env 的配置
    postcss-preset-env可通过stage选项配置需要启用的features,默认值为2。关于不同stage启用的features,可查看官网https://preset-env.cssdb.org/features/也可以直接配置f......
  • C语言关键字和语句
    auto自动(变量类型前,一般省略了,例inta=0;其实int前就修饰了auto)break返回,一般用于循环和swith的结束,循环就直接跳出循环,case   swith语句里的判断,const 常量修饰......
  • webstorm typescript .d.ts文件 使用问题
    问题描述 webstorm中global.d.ts文件当全局变量用,不行。直接上干货,能对上你的问题就恭喜了。global.d.ts内容  tsconfig.json   直接使用,不用导入  ......
  • 别只用UC浏览器了,这5款体验更好的浏览器,满足你的所有想象
    不知道大家都用什么手机浏览器,是自带的浏览器,还是UC浏览器、百度、谷歌等老牌浏览器?如果这些浏览器带来了体验感不佳,用的流量多,卡慢等问题,那么,你可以尝试一下接下来介绍的5......
  • SQL0289N Unable to allocate new pages in table space
    db2-tvfzhangsan.sql报错:"SQL0289NUnabletoallocatenewpagesintablespace"USERSPACE1".SQLSTATE=57011"表空间大小不够了可以在备份库下执行db2listtablespace......