服务之:端口占用

该代码示例展示了如何在C#中使用IPGlobalProperties类来检查端口是否被占用,并从一组候选端口中选择未被使用的端口。通过遍历GetActiveTcpConnections和GetActiveTcpListeners来判断端口状态,确保选取的端口处于空闲状态。
摘要由CSDN通过智能技术生成

在开启服务的时候,需要检测端口有没有被占用,可借助本地计算机的网络连接的信息(IPGlobalProperties)

 public class NetworkHelper
    {
        public static int Port => EnsureEstablishedPort(CandidatePorts);

        /// <summary>
        /// 获取可用的端口
        /// </summary>
        /// <param name="availablePorts"></param>
        /// <returns></returns>
        private static int EnsureEstablishedPort(IEnumerable<int> availablePorts)
        {
            foreach (int availablePort in availablePorts)
                if (!CheckPortInUse(availablePort))
                    return availablePort;
            return -1;
        }

        /// <summary>
        /// 检测端口是否被占用
        /// </summary>
        /// <param name="port"></param>
        /// <returns></returns>
        private static bool CheckPortInUse(int port)
        {
            IPGlobalProperties iPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
            TcpConnectionInformation[] activeTcpConnections = iPGlobalProperties.GetActiveTcpConnections();
            foreach (TcpConnectionInformation tcpConnectionInformation in activeTcpConnections)
                if (tcpConnectionInformation.LocalEndPoint.Port == port && (tcpConnectionInformation.State == TcpState.Established || tcpConnectionInformation.State == TcpState.CloseWait))
                    return true;

            IPEndPoint[] activeTcpListeners = iPGlobalProperties.GetActiveTcpListeners();
            if (activeTcpListeners.Length == 0) return false;
            foreach (var t in activeTcpListeners)
                if (t.Port == port)
                    return true;
            return false;
        }

        //候选端口
        private static readonly int[] CandidatePorts = new int[2] { 1234, 5678 };
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值