首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

C# 檢測端口是否被佔用:IPGlobalProperties 實現與測試代碼

     編輯:更多程式設計知識

核心實現

using System.Net.NetworkInformation;

public static bool PortInUse(int port) {
    var ipProps = IPGlobalProperties.GetIPGlobalProperties();
    var listeners = ipProps.GetActiveTcpListeners(); // 僅 TCP 監聽端口
    foreach (var ep in listeners) {
        if (ep.Port == port) return true;
    }
    return false;
}

完整測試示例

using System;
using System.Net;
using System.Net.Sockets;

class Program {
    static void Main() {
        // 啟動一個 HTTP 監聽器佔用 8080
        var listener = new HttpListener();
        listener.Prefixes.Add("https://*:8080/");
        listener.Start();
        Console.WriteLine("HttpListener started on 8080");

        Console.WriteLine($"Port 8080 status: {(PortInUse(8080) ? "in use" : "free")}");

        Console.ReadKey();
        listener.Close();
    }

    static bool PortInUse(int port) {
        var ipProps = IPGlobalProperties.GetIPGlobalProperties();
        foreach (var ep in ipProps.GetActiveTcpListeners()) {
            if (ep.Port == port) return true;
        }
        return false;
    }
}

注意事項

  • GetActiveTcpListeners 僅返回 TCP 監聽端口,UDP 端口需用 GetActiveUdpListeners
  • 需管理員權限才能看到所有進程的端口(否則僅見當前用戶進程)
  • .NET Core / .NET 5+ 同樣適用
  • 端口範圍:1024-65535(0-1023 為系統保留,需特權)

擴展:掃描可用端口範圍


public static int FindFreePort(int start = 10000, int end = 20000) {
    var used = new HashSet();
    var ipProps = IPGlobalProperties.GetIPGlobalProperties();
    foreach (var ep in ipProps.GetActiveTcpListeners()) used.Add(ep.Port);
    foreach (var ep in ipProps.GetActiveUdpListeners()) used.Add(ep.Port);

    for (int p = start; p <= end; p++) {
        if (!used.Contains(p)) return p;
    }
    throw new InvalidOperationException("無可用端口");
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved