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);
//补充:软件开发 , C# ,
上一个:c# 允许服务与桌面交互
下一个:C#实现所有经典排序算法
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,
部分文章来自网络,