zoukankan      html  css  js  c++  java
  • C# 获取随机可用端口号

     TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号。对于这65536个端口号有以下的使用规定:

    (1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1---1023之间的端口号,是由IANA来管理的;

    (2)客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;

    (3)大多数TCP/IP实现给临时端口号分配1024---5000之间的端口号。大于5000的端口号是为其他服务器预留的。

    那么如何随机获取一个可用端口号呢,我们首先可以调用如下方法获取所有已用端口,随机取出一个1024--65535之间的端口,然后判断此端口是否被占用,如果被占用,继续取随机端口,直到取出未占用的随机端口即可。

    /// <summary>        

    /// 获取操作系统已用的端口号        

    /// </summary>        

    /// <returns></returns>        

    public static IList PortIsUsed()        

    {            

      //获取本地计算机的网络连接和通信统计数据的信息            

      IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();

          //返回本地计算机上的所有Tcp监听程序            

      IPEndPoint[] ipsTCP = ipGlobalProperties.GetActiveTcpListeners();

      //返回本地计算机上的所有UDP监听程序            

      IPEndPoint[] ipsUDP = ipGlobalProperties.GetActiveUdpListeners();

         //返回本地计算机上的Internet协议版本4(IPV4 传输控制协议(TCP)连接的信息。            

      TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();

          IList allPorts = new ArrayList();            

      foreach (IPEndPoint ep in ipsTCP)

      {

        allPorts.Add(ep.Port);        

      }    

          foreach (IPEndPoint ep in ipsUDP)

      {

        allPorts.Add(ep.Port);            

      }

      foreach (TcpConnectionInformation conn in tcpConnInfoArray)

      {

        allPorts.Add(conn.LocalEndPoint.Port);

      }

       return allPorts;        

    }

  • 相关阅读:
    log4net的使用
    数据库概念及构成
    基于C#WPF框架——动画
    基于C# WPF框架的贪吃蛇
    使用Teigha.net读取CAD的常用功能模块
    Teigha.net实体属性注释
    .net(C#数据库访问) Mysql,Sql server,Sqlite,Access四种数据库的连接方式
    Delphi解析修改Json文件,基于superobject.pas(ISuperObject)
    C++结构体与Delphi结构体相互传参,结构体中包含结构体的嵌套,数组指针
    C++ Json解析CJsonObject的详细使用
  • 原文地址:https://www.cnblogs.com/moonlight-zjb/p/3490652.html
Copyright © 2011-2022 走看看