UDP端口打开检查

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

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

但是是否有指定的function可以检查UDP端口是否打开。 如果没有扫描UDP端口的整个表集也会很好。

 int myport = 7525; bool alreadyinuse = (from p in System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners() where p.Port == myport select p).Count() == 1; 

下面的评论提出了一个可以提供第一个免费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? }