我用try-catch,循环一个端口数组,bind有异常代表端口不可用,去试下一个端口

解决方案 »

  1.   

    UDP_server = new UdpClient(0);
    当参数为0时,会自动给你一个可用的端口。
      

  2.   

     /// <summary>
            /// 获取第一个可用的端口号
            /// </summary>
            /// <returns></returns>
            public static 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>
            public static 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>
            public static bool PortIsAvailable(int port)
            {
                bool isAvailable = true;            IList portUsed = PortIsUsed();            foreach (int p in portUsed)
                {
                    if (p == port)
                    {
                        isAvailable = false; break;
                    }
                }            return isAvailable;
            }
      

  3.   

     引用空间:using System.Net.NetworkInformation;给分结贴了。
      

  4.   

    我直接用 内网ip:80 和 255.255.255.255:80,然后开着chrome,连接另一个监听80的UdpClient,没事,UDP不在乎端口占用的,可以通讯,再举个例子,用4001,4002等QQ专用的,还是直接用。我也不知道为什么.........................