程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#實現檢查指定端口被哪個進程占用

C#實現檢查指定端口被哪個進程占用

編輯:C#入門知識

1. 檢查當前系統中80端口是否正在被其它進程使用;

2. 如果80端口正在被使用,就找出該進程,並強行結束。

3. 使用C#變成語言實現。

 

別人問我問題時,我通常會去google一下,幫他們找到一個合適的就行了,這次也不例外!但遺憾的是,沒有找到一個解決方案,於是寫下了這篇文章,希望能夠拋磚引玉,給網友們一些幫助,同時也希望能跟更多的朋友交流一下!

 

要解決第一個問題方法很直接,可以在程序中直接請求系統要綁定80端口, 如果綁定失敗(拋出異常)則表示80端口已經被占用,這也是我在寫網絡程序時最常用的方法。

 

如果要檢查80端口在被哪一個進程所使用,可能要費點心思。做網絡的朋友應該十分熟悉一個命令:netstat -ano,在控制台(CMD)運行該命令時,可以列出當前所占用的所有端口,我們不妨也借助與系統中所提供的這個命令,然後分析運行結果就行了!

 

簡單的解決方案如下:

1. 在程序中啟動一個新的進程,該進程的執行文件為:CMD.EXE

2. 給該進程傳遞一個命令行參數:netstat -ano

3. 獲取該命令所返回的結果,並對其進行分析,找出端口為80的進程ID(PID)

4. 根據PID找出該進程,可以對該進程進行任意的處理

 

C#實現代碼(既然是拋磚引玉,這裡代碼需要十分的簡潔,所以並沒有考慮任何錯誤處理問題,如果哪位朋友直接用到了工程中, 所引起的問題筆者不負任何責任):

 

\\代碼
static void Main(string[] args) {
Process pro = new Process();

// 設置命令行、參數
pro.StartInfo.FileName = "cmd.exe";
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardInput = true;
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.RedirectStandardError = true;
pro.StartInfo.CreateNoWindow = true;
// 啟動CMD
pro.Start();
// 運行端口檢查命令
pro.StandardInput.WriteLine("netstat -ano");
pro.StandardInput.WriteLine("exit");

// 獲取結果
Regex reg = new Regex("\s+", RegexOptions.Compiled);
string line = null;
while ((line = pro.StandardOutput.ReadLine()) != null) {
line = line.Trim();
if (line.StartsWith("TCP", StringComparison.OrdinalIgnoreCase)) {
line = reg.Replace(line, ",");

string[] arr = line.Split(,);
if (arr[1].EndsWith(":80")) {
Console.WriteLine("80端口的進程ID:{0}", arr[4]);

int pid = Int32.Parse(arr[4]);
Process pro80 = Process.GetProcessById(pid);
//
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved