C#实时检测端口占用情况

在TCP/IP协议中,服务端需要去监听客户端的端口,开始监听,我们需要检测使用的端口是否被占用,获取系统当前使用的所有端口号,用此端口进行匹配即可。

代码如下

/// <summary>
        /// 检查端口,true表示已被占用
        /// </summary>
        /// <param name="port"></param>
        /// <returns></returns>
        internal static Boolean IsPortOccuped(Int32 port)
        {
            System.Net.NetworkInformation.IPGlobalProperties iproperties = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties();
            System.Net.IPEndPoint[] ipEndPoints = iproperties.GetActiveTcpListeners();
            foreach (var item in ipEndPoints)
            {
                if (item.Port == port)
                {
                    return true;
                }
            }
            return false;
        }

 

而如果需要实时的刷新端口占用情况,并用其进行TCP连接,希望自己占用的端口在呈现给自己时显示不被占用,例如当服务端UI界面显示监听192.168.0.162IP的客户端时用的9922端口,而不希望在同一DataGridView表中,此行的后面“端口是否被占用“”列中显示已被占用的红色X号图标 , 即在检测端口状态时如果是与此IP通讯占用,排除此IP,如下图

 

 

代码如下

        static List<IpAndPort> IpAndPortList = new List<IpAndPort>();
        static List<string> PortList = new List<string>();

        internal static Boolean IsPortOccupedFun2(Int32 port, IpAndPort m_PortList)
        {
            System.Net.NetworkInformation.IPGlobalProperties iproperties = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties();
            System.Net.IPEndPoint[] ipEndPoints = iproperties.GetActiveTcpListeners();

            if (!PortList.Contains(m_PortList.port))
            {
                PortList.Add(m_PortList.port);
                IpAndPortList.Add(m_PortList);
            }
            foreach (var item in ipEndPoints)
            {

                if (item.Port == Convert.ToInt32(m_PortList.port))
                {
                    foreach (IpAndPort ipPort in IpAndPortList)
                    {
                        if (ipPort.ip.Equals(m_PortList.ip) && ipPort.port.Equals(m_PortList.port))
                        {
                            return false;
                        }
                    }
                    return true;
                }
            }
            return false;
        }

        public class IpAndPort
        {
            public string ip;
            public string  port;
        }

 

posted @ 2019-03-21 11:12  be--yourself  阅读(1722)  评论(1编辑  收藏  举报