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