gpt4 book ai didi

c# - 限制动态 IP 端口范围

转载 作者:行者123 更新时间:2023-12-03 12:05:13 25 4
gpt4 key购买 nike

我创建了一个为其客户端动态打开端口的服务器应用程序。我现在使用绑定(bind)到端口 0 的套接字,所以我得到了一个随机分配的端口。这很好用,但缺点是我需要为此过程打开防火墙中的所有端口。

我宁愿将范围限制在 40000-41000 之间,并在此范围内选择随机端口。有没有办法让操作系统在这个范围内选择一个空闲端口?

当然,我可以自己在这个范围内选择一个端口,如果它是免费的,那么就使用它。否则尝试另一个端口,直到我们找到一个空闲端口。我不认为这是一个很好的解决方案。我可以注册自己的端口,但其他服务也可以在此范围内保留端口。

任何人的解决方案?我在带有自定义 C# 4.5 服务器的 Windows Server 2008 R2 系统上工作。

最佳答案

IPGlobalProperties 可以为您提供当前繁忙的端口。这是一种方法:

// Returns available port number or zero if no port is available
public static int GetFirstAvailableRandomPort (int startPort, int stopPort)
{
Random r = new Random() ;

IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();

var busyPorts = tcpConnInfoArray.Select(t => t.LocalEndPoint.Port).Where(v => v >= startPort&& v <= stopPort ).ToArray() ;

var firstAvailableRandomPort = Enumerable.Range(startPort, stopPort - startPort).OrderBy(v => r.Next()).FirstOrDefault(p => !busyPorts .Contains(p))

return firstAvailableRandomPort ;
}

用法 :
var randomPort  = GetFirstAvailableRandomPort(40000, 41000) ; 

关于c# - 限制动态 IP 端口范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24679838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com