UDP端口打开检查

本文关键字:检查 UDP | 更新日期: 2023-09-27 17:54:29

在同一台机器上检查UDP端口是否打开的最佳方法是什么?我有端口号7525UDP,如果它是打开的,我想绑定到它。我正在使用这个代码:

while (true) 
{ 
  try {socket.bind()}
  catch (Exception ex) 
  {MessageBox.Show("socket probably in use");}
}

但是是否有一个指定的函数可以检查UDP端口是否打开。不为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?
    }