这篇文章解决两个问题:
- 检查某个端口是否可用
- 在指定区间找可用的端口号
static void Main(string[] args)
{
// 检查端口是否已经占用
// in_use:true 表示占用
int my_port = 7525;
var activeUdpListeners = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners();
bool in_use = activeUdpListeners.Any(p => p.Port == my_port);
Console.WriteLine("port {0} is {1}", my_port, in_use ? "in use." : "free.");
// 查找指定范围的第一个空闲端口
var startPort = 50000;
var endPort = 55000;
var free_port = Enumerable.Range(startPort, endPort).First(p => !activeUdpListeners.Any(l => l.Port == p));
Console.WriteLine("the first free port in range[{0},{1}] is {2}.", startPort, endPort, free_port);
Console.ReadKey();
}