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?
}
:-)很好的接觸,雖然它不是什麼我一直在尋找,但它是未來最好的事情。當然,這項工作測試,它正在工作:-)謝謝。 – Thomas 2011-05-09 14:14:45
從.NET 4開始,此方法適用於IP v4和IP v6。但是,如果您熟悉如何解釋MSDN文檔,則它只適用於所有舊.NET版本(如.NET 2.0/3.0/3.5)的IP v4。 – 2013-03-06 07:58:56
認爲它應該是一個'> 0'比較在多個閱讀器的情況下。 – 2014-08-11 17:47:51