C#获取本机可用端口及已经使用的端口
作者:C/S框架网  发布日期:2011/06/26 22:51:16
C#获取本机可用端口及已经使用的端口


在百度里搜索"C#获取可用端口"居然找不到答案,只得去Google搜索外文网,
输入"C# Get Available Port"查出很多结果。复制了一段代码测试OK, 我再拆分成以下几个方法:


/// <summary>
/// 获取第一个可用的端口号
/// </summary>
/// <returns></returns>
private int GetFirstAvailablePort()
{
   int MAX_PORT = 65535; //系统tcp/udp端口数最大是65535
   int BEGIN_PORT = 5000;//从这个端口开始检测
   
   for (int i = BEGIN_PORT; i < MAX_PORT; i++)
   {
      if (PortIsAvailable(i)) return i;
   }
   
   return -1;
}

/// <summary>
/// 获取操作系统已用的端口号
/// </summary>
/// <returns></returns>
private 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;
}

/// <summary>
/// 检查指定端口是否已用
/// </summary>
/// <param name="port"></param>
/// <returns></returns>
private bool PortIsAvailable(int port)
{
   bool isAvailable = true;
   
   IList portUsed = PortIsUsed();
   
   foreach (int p in portUsed)
   {
      if (p == port)
      {
         isAvailable = false; break;
      }
   }
   
   return isAvailable;
}

C/S框架网 www.csframework.com



中文网会多出一个搜索关键啦!!!

上一篇 下一篇