在C#中使用TcpClient或者其他通用的方式建立的Socket,该如何判断这个端口是否被占用?比如下面的代码:
TcpClient tc = new TcpClient(ip,port);
在C#中,可以使用System.Net.NetworkInformation命名空间下的IPGlobalProperties类和TcpConnectionInformation类来判断某个TCP端口是否被占用:
using System.Net.NetworkInformation;int port = 80;if(IsPortInUse(port)){ Console.WriteLine($"{port} 端口被占用!");}else{ Console.WriteLine($"{port} 端口未被占用!");}Console.ReadLine();bool IsPortInUse(int port){ IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); TcpConnectionInformation[] connections = properties.GetActiveTcpConnections(); foreach (TcpConnectionInformation connection in connections) { if (connection.LocalEndPoint.Port == port) { // 端口已被占用 return true; } } // 端口未被占用 return false;}80 端口未被占用!
在上述示例中,IsPortInUse方法接收一个整数参数表示端口号。它通过IPGlobalProperties.GetIPGlobalProperties方法获取当前计算机的网络连接信息,然后使用GetActiveTcpConnections方法获取所有活动的TCP连接信息。接着,使用循环遍历每个TCP连接信息,判断本地端点的端口号是否与传入的端口号相同。如果找到匹配的端口号,则表示端口已被占用;否则,表示端口未被占用。
需要注意的是,为了执行此操作,可能需要管理员权限或运行在适当的操作系统上。此外,还要确保没有其他进程在占用同一端口,因为TCP连接仅能检测到已建立的连接而无法检测到监听状态的端口。
想要检测监听状态的端口,可以使用System.Net.NetworkInformation命名空间下的IPGlobalProperties类和IPEndPoint类来获取所有监听的TCP端口。
using System.Net;using System.Net.NetworkInformation;public void GetListeningPorts(){ IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); IPEndPoint[] endpoints = properties.GetActiveTcpListeners(); foreach (IPEndPoint endpoint in endpoints) { Console.WriteLine($"监听状态的端口:{endpoint.Port}"); }}
监听状态的端口:80监听状态的端口:135监听状态的端口:445监听状态的端口:1433监听状态的端口:2383监听状态的端口:3306监听状态的端口:3389监听状态的端口:5040....
在命令提示符(cmd)中,可以使用 netstat 命令来列出占用的端口
netstat -ano | findstr LISTENING
这个命令会列出所有正在监听(被占用)的端口,并显示与每个端口关联的进程标识符(PID)。
这个命令的部分:
执行上述命令后,将看到正在监听的端口列表以及与它们关联的进程的 PID。可以根据需要查找特定的端口或进一步处理输出结果
C:/Users/Admin>netstat -ano | findstr LISTENING TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 848 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 4956 TCP 0.0.0.0:2383 0.0.0.0:0 LISTENING 5200 TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 4280 TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 1204 TCP 0.0.0.0:5040 0.0.0.0:0 LISTENING 6424 TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 8344 TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 308 TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 932 TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1512 TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING 1364 TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 2484 TCP 0.0.0.0:49669 0.0.0.0:0 LISTENING 3440 TCP 0.0.0.0:49673 0.0.0.0:0 LISTENING 68 TCP 0.0.0.0:49706 0.0.0.0:0 LISTENING 4956 TCP 0.0.0.0:50128 0.0.0.0:0 LISTENING 4 TCP 127.0.0.1:22 0.0.0.0:0 LISTENING 8960 TCP 127.0.0.1:81 0.0.0.0:0 LISTENING 8960 TCP 127.0.0.1:443 0.0.0.0:0 LISTENING 8960 TCP 127.0.0.1:1434 0.0.0.0:0 LISTENING 4956 TCP 127.0.0.1:4012 0.0.0.0:0 LISTENING 4180 TCP 127.0.0.1:4013 0.0.0.0:0 LISTENING 4180 TCP 127.0.0.1:4301 0.0.0.0:0 LISTENING 8008 TCP 127.0.0.1:5533 0.0.0.0:0 LISTENING 18928 TCP 127.0.0.1:9210 0.0.0.0:0 LISTENING 6924 TCP 127.0.0.1:9418 0.0.0.0:0 LISTENING 8960 TCP 127.0.0.1:49672 0.0.0.0:0 LISTENING 3804 TCP 127.0.0.1:57178 0.0.0.0:0 LISTENING 2600 TCP 127.0.0.1:57335 0.0.0.0:0 LISTENING 17900 TCP 192.168.1.108:139 0.0.0.0:0 LISTENING 4 TCP [::]:80 [::]:0 LISTENING 4 TCP [::]:135 [::]:0 LISTENING 848 TCP [::]:445 [::]:0 LISTENING 4 TCP [::]:1433 [::]:0 LISTENING 4956 TCP [::]:2383 [::]:0 LISTENING 5200 TCP [::]:3306 [::]:0 LISTENING 4280 TCP [::]:3389 [::]:0 LISTENING 1204 TCP [::]:7680 [::]:0 LISTENING 8344 TCP [::]:49664 [::]:0 LISTENING 308 TCP [::]:49665 [::]:0 LISTENING 932 TCP [::]:49666 [::]:0 LISTENING 1512 TCP [::]:49667 [::]:0 LISTENING 1364 TCP [::]:49668 [::]:0 LISTENING 2484 TCP [::]:49669 [::]:0 LISTENING 3440 TCP [::]:49673 [::]:0 LISTENING 68 TCP [::]:49706 [::]:0 LISTENING 4956 TCP [::]:50128 [::]:0 LISTENING 4 TCP [::1]:22 [::]:0 LISTENING 8960 TCP [::1]:81 [::]:0 LISTENING 8960 TCP [::1]:443 [::]:0 LISTENING 8960 TCP [::1]:1434 [::]:0 LISTENING 4956 TCP [::1]:9418 [::]:0 LISTENING 8960
本文链接:http://www.28at.com/showinfo-26-60392-0.htmlC# 如何判断某个 TCP 端口是否被占用?
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com