如何检查本机的UDP端口是否打开是最佳方式?我有一个端口号7525UDP
,如果它是打开的,我想要绑定它。我正在使用以下代码:
while (true)
{
try {socket.bind()}
catch (Exception ex)
{MessageBox.Show("socket probably in use");}
}
但是否有特定的函数可以检查UDP端口是否开放?不必扫描整个UDP端口表也可以。
int myport = 7525;
bool alreadyinuse = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners().Any(p => p.Port == myport);
下面的评论提出了一种变化,它将提供第一个可用的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?
}
> 0
比较。 - Mare Infinitusvar isInUsed = IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners().Any(p => p.Port == 7525);
- Peter LiangEnumerable.Range(5000, 6000).First(p => !IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners().Any(l => l.Port == p))
。 - aL3891
var udp = new UdpClient(0); int port = ((IPEndPoint)udp.Client.LocalEndPoint).Port;
- marbel82