Nat*_*han 20
int myport = 7525;
bool alreadyinuse = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners().Any(p => p.Port == myport);
Run Code Online (Sandbox Code Playgroud)
下面的评论提出了一个变量,它将提供第一个免费UDP端口......但是,建议的代码效率很低,因为它多次调用外部程序集(取决于正在使用的端口数).这是一个更有效的变体,它只调用一次外部程序集(并且更具可读性):
var startingAtPort = 5000;
var maxNumberOfPortsToCheck = 500;
var range = Enumerable.Range(startingAtPort, maxNumberOfPortsToCheck);
var portsInUse =
from p in range
join used in System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners()
on p equals used.Port
select p;
var FirstFreeUDPPortInRange = range.Except(portsInUse).FirstOrDefault();
if(FirstFreeUDPPortInRange > 0)
{
// do stuff
Console.WriteLine(FirstFreeUDPPortInRange);
} else {
// complain about lack of free ports?
}
Run Code Online (Sandbox Code Playgroud)