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);
//