1

I want to iterate UDP port from 5000 to 50xx

How can I check if a specific port is already open or free to use?

I use this code but it always returns false:

public bool PortIsUsed(int myport)
{
   bool alreadyinuse = (from p in System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners() where p.Port == myport select p).Count() == 1;
   return alreadyinuse;
}
4

1 回答 1

1

通常在请求共享资源(例如 UDP 端口号)时,会询问“这现在可用吗?” 没有生产力。无论您得到哪个答案,都可能在下一微秒内变得不正确,因为另一个应用程序可能会更改使答案无效的内容。

您可以做的是让操作系统侦听特定端口(“获取”资源)。操作系统会说yes,这是一个句柄或其他什么,或者no,其他一些进程正在使用该特定端口。无论哪种方式,您都会得到一个可以明确采取行动的答案。(具体来说,如果您得到否定的答案,请尝试不同的端口。)

于 2012-08-01T03:09:35.120 回答