自动获取本机IP和空闲端口

该博客介绍了一种方法来获取本机的IPv4地址和寻找可用的UDP端口。通过Dns.GetHostEntry获取主机名的IP地址列表,筛选出InterNetwork类型的IP。同时,使用System.Net.NetworkInformation库查找从指定起始端口开始的下一个可用UDP端口,确保在IPEndPoint的最大端口范围内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//获取本机IP
void GetAddressIP()
        {
            ///获取本地的IP地址
            string AddressIP = string.Empty;
            foreach (IPAddress _IPAddress in  Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                }
            }
            txtLocalIP.Text = AddressIP;
        }
//获取端口号
using System.Net.NetworkInformation;
 private const string PortReleaseGuid = "8875BD8E-4D5B-11DE-B2F4-691756D89593";
          public void FindNextAvailableUDPPort(int startPort) 
          { 
              port = startPort; 
              bool isAvailable = true;

              var mutex = new Mutex(false, 
                  string.Concat("Global/", PortReleaseGuid)); 
              mutex.WaitOne(); 
              try 
              { 
                  IPGlobalProperties ipGlobalProperties = 
                      IPGlobalProperties.GetIPGlobalProperties(); 
                  IPEndPoint[] endPoints = 
                      ipGlobalProperties.GetActiveUdpListeners();

                  do 
                  { 
                      if (!isAvailable) 
                      { 
                          port++; 
                          isAvailable = true; 
                      }

                      foreach (IPEndPoint endPoint in endPoints) 
                      { 
                          if (endPoint.Port != port) 
                              continue; 
                          isAvailable = false; 
                          break; 
                      }

                  } while (!isAvailable && port < IPEndPoint.MaxPort);

                  if (!isAvailable) 
                      throw new ApplicationException("Not able to find a free TCP port.");
                  
                // return port; 
              } 
              finally 
              { 
                  mutex.ReleaseMutex(); 
              }
              servePORT.Text=port.ToString();
          
          } 




                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值