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
+ }
100
102
}
0 commit comments