Skip to content

Commit ed5aa74

Browse files
committed
[修改]1. 修改端口检查的函数描述
1 parent 6ee5579 commit ed5aa74

File tree

1 file changed

+101
-99
lines changed

1 file changed

+101
-99
lines changed

GameFrameX.Utility/Utility.Net.cs

Lines changed: 101 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,102 @@
1-
using System.Net;
2-
using System.Net.NetworkInformation;
3-
4-
namespace GameFrameX.Utility;
5-
6-
/// <summary>
7-
/// 网络端口帮助类
8-
/// </summary>
9-
public static class Net
10-
{
11-
/// <summary>
12-
/// 判断IP地址是否合法
13-
/// </summary>
14-
/// <param name="ipAddress">IP地址字符串</param>
15-
/// <param name="value">解析成功的IPAddress对象</param>
16-
/// <returns>如果IP地址合法,返回true;否则返回false</returns>
17-
public static bool IsValidIpAddress(string ipAddress, out IPAddress value)
18-
{
19-
return IPAddress.TryParse(ipAddress, out value);
20-
}
21-
22-
/// <summary>
23-
/// 获取第一个可用的端口号
24-
/// </summary>
25-
/// <param name="startPort">起始端口号,默认为667</param>
26-
/// <param name="maxPort">结束端口号,默认为65535</param>
27-
/// <returns>第一个可用的端口号,如果没有可用端口号则返回-1</returns>
28-
public static int GetFirstAvailablePort(int startPort = 667, int maxPort = 65535)
29-
{
30-
for (var i = startPort; i < maxPort; i++)
31-
{
32-
if (PortIsAvailable(i))
33-
{
34-
return i;
35-
}
36-
}
37-
38-
return -1;
39-
}
40-
41-
/// <summary>
42-
/// 获取操作系统已用的端口号
43-
/// </summary>
44-
/// <returns>包含已用端口号的列表</returns>
45-
public static List<int> PortIsUsed()
46-
{
47-
// 获取本地计算机的网络连接和通信统计数据的信息
48-
var ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
49-
50-
// 返回本地计算机上的所有TCP监听程序
51-
var ipsTcp = ipGlobalProperties.GetActiveTcpListeners();
52-
53-
// 返回本地计算机上的所有UDP监听程序
54-
var ipsUdp = ipGlobalProperties.GetActiveUdpListeners();
55-
56-
// 返回本地计算机上的Internet协议版本4 (IPV4) 传输控制协议 (TCP) 连接的信息
57-
var tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
58-
59-
var allPorts = new List<int>();
60-
foreach (var ep in ipsTcp)
61-
{
62-
allPorts.Add(ep.Port);
63-
}
64-
65-
foreach (var ep in ipsUdp)
66-
{
67-
allPorts.Add(ep.Port);
68-
}
69-
70-
foreach (var conn in tcpConnInfoArray)
71-
{
72-
allPorts.Add(conn.LocalEndPoint.Port);
73-
}
74-
75-
return allPorts;
76-
}
77-
78-
/// <summary>
79-
/// 检查指定端口是否已用
80-
/// </summary>
81-
/// <param name="port">要检查的端口号</param>
82-
/// <returns>如果端口未被使用,返回true;否则返回false</returns>
83-
public static bool PortIsAvailable(int port)
84-
{
85-
var isAvailable = true;
86-
87-
var portUsed = PortIsUsed();
88-
89-
foreach (var p in portUsed)
90-
{
91-
if (p == port)
92-
{
93-
isAvailable = false;
94-
break;
95-
}
96-
}
97-
98-
return isAvailable;
99-
}
1+
using System.Net;
2+
using System.Net.NetworkInformation;
3+
4+
namespace GameFrameX.Utility;
5+
6+
/// <summary>
7+
/// 网络端口帮助类
8+
/// </summary>
9+
public static class Net
10+
{
11+
/// <summary>
12+
/// 判断IP地址是否合法
13+
/// </summary>
14+
/// <param name="ipAddress">IP地址字符串</param>
15+
/// <param name="value">解析成功的IPAddress对象</param>
16+
/// <returns>如果IP地址合法,返回true;否则返回false</returns>
17+
public static bool IsValidIpAddress(string ipAddress, out IPAddress value)
18+
{
19+
return IPAddress.TryParse(ipAddress, out value);
20+
}
21+
22+
/// <summary>
23+
/// 获取第一个可用的端口号
24+
/// </summary>
25+
/// <param name="startPort">起始端口号,默认为667</param>
26+
/// <param name="maxPort">结束端口号,默认为65535</param>
27+
/// <returns>第一个可用的端口号,如果没有可用端口号则返回-1</returns>
28+
public static int GetFirstAvailablePort(int startPort = 667, int maxPort = 65535)
29+
{
30+
for (var i = startPort; i < maxPort; i++)
31+
{
32+
if (PortIsAvailable(i))
33+
{
34+
return i;
35+
}
36+
}
37+
38+
return -1;
39+
}
40+
41+
/// <summary>
42+
/// 获取操作系统已用的端口号
43+
/// </summary>
44+
/// <returns>包含已用端口号的列表</returns>
45+
public static List<int> PortIsUsed()
46+
{
47+
// 获取本地计算机的网络连接和通信统计数据的信息
48+
var ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
49+
50+
// 返回本地计算机上的所有TCP监听程序
51+
var ipsTcp = ipGlobalProperties.GetActiveTcpListeners();
52+
53+
// 返回本地计算机上的所有UDP监听程序
54+
var ipsUdp = ipGlobalProperties.GetActiveUdpListeners();
55+
56+
// 返回本地计算机上的Internet协议版本4 (IPV4) 传输控制协议 (TCP) 连接的信息
57+
var tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();
58+
59+
var allPorts = new List<int>();
60+
foreach (var ep in ipsTcp)
61+
{
62+
allPorts.Add(ep.Port);
63+
}
64+
65+
foreach (var ep in ipsUdp)
66+
{
67+
allPorts.Add(ep.Port);
68+
}
69+
70+
foreach (var conn in tcpConnInfoArray)
71+
{
72+
allPorts.Add(conn.LocalEndPoint.Port);
73+
}
74+
75+
return allPorts;
76+
}
77+
78+
/// <summary>
79+
/// 检查指定端口是否可用
80+
/// </summary>
81+
/// <param name="port">要检查的端口号</param>
82+
/// <returns>如果端口未被使用,返回true;否则返回false</returns>
83+
public static bool PortIsAvailable(int port)
84+
{
85+
var isAvailable = true;
86+
87+
var portUsed = PortIsUsed();
88+
89+
foreach (var p in portUsed)
90+
{
91+
if (p != port)
92+
{
93+
continue;
94+
}
95+
96+
isAvailable = false;
97+
break;
98+
}
99+
100+
return isAvailable;
101+
}
100102
}

0 commit comments

Comments
 (0)