但是本机一个端口只能一个程序监听,所以我们进行本地监听的时候需要检测端口是否被占用。
命名空间System.Net.NetworkInformation下定义了一个名为IPGlobalProperties的类,我们使用这个类可以获取所有的监听连接,然后判断端口是否被占用,代码如下:
- public static bool PortInUse(int port)
- {
- bool inUse = false;
-
- IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();
- IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();
-
- foreach (IPEndPoint endPoint in ipEndPoints)
- {
- if (endPoint.Port == port)
- {
- inUse = true;
- break;
- }
- }
-
- return inUse;
- }
我们使用HttpListner类在8080端口启动一个监听,然后测试是否可以被检测出来,代码如下:
- static void Main(string[] args)
- {
- HttpListener httpListner = new HttpListener();
- httpListner.Prefixes.Add("http://*:8080/");
- httpListner.Start();
-
- Console.WriteLine("Port: 8080 status: " + (PortInUse(8080) ? "in use" : "not in use"));
-
- Console.ReadKey();
-
- httpListner.Close();
- }