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#实现代码(既然是抛砖引玉,这里代码需要十分的简洁,所以并没有考虑任何错误处理问题,如果哪位朋友直接用到了工程中, 所引起的问题笔者不负任何责任):

 

<!--Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/-->
 
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);
               
// 处理该进程

               
break ;
            }
        }
    }

    pro.Close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值