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


    在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;
            }
  • 相关阅读:
    字符替换
    并发编程之线程创建
    禁止浏览器缓存文件
    Java垃圾回收机
    带你走进ajax
    MFC的CString使用
    《Java小游戏》:球球大作战
    【推荐】开源项目ElasticAmbari助力 ElasticSearch、Kibana、ambari服务高效运维管理
    Java基础
    什么是可串行化MVCC
  • 原文地址:https://www.cnblogs.com/CityOfThousandFires/p/10570288.html
Copyright © 2020-2023  润新知