source: trunk/ab5.0/ablib/src/Classes/System/Net/IPEndPoint.ab@ 648

Last change on this file since 648 was 648, checked in by OverTaker, 16 years ago

IPEndPointの実装

File size: 3.6 KB
Line 
1
2/*!
3 @brief インターネットワーク端末のアドレスを表します。
4 @author OverTaker
5 @date 2008/10/18
6*/
7
8
9
10Namespace System
11Namespace Net
12
13
14Class IPEndPoint
15 Inherits EndPoint
16Public
17
18 /*!
19 @brief コンストラクタ
20 @param IPアドレスを表した32ビット値(ネットワークバイトオーダー)
21 @param ポート番号(ホストバイトオーダー)
22 */
23 Sub IPEndPoint(ip As DWord, port As Word)
24 init( New IPAddress(ip), port )
25 End Sub
26
27 /*!
28 @brief コンストラクタ
29 @param IPAddressクラス
30 @param ポート番号(ホストバイトオーダー)
31 */
32 Sub IPEndPoint(ip As IPAddress, port As Word)
33 init(ip, port)
34 End Sub
35
36 /*!
37 @brief 等しいかどうかを取得する
38 @retval True 等しい
39 @retval Flase 等しくない
40 */
41 Function Equals(endPoint As IPEndPoint) As Boolean
42 Return socketAddress.Equals(endPoint.socketAddress)
43 End Function
44
45 /*!
46 @brief IPEndPointを文字列で表す
47 @return アドレスとポート番号が文字列で表されます
48 */
49 Override Function ToString() As String
50 Dim temp[64] As TCHAR
51 If WSAAddressToString(socketAddress.Items As sockaddr, socketAddress.Size, ByVal 0, temp, Len(temp)) Then
52 Throw New System.Net.Sockets.SocketException(WSAGetLastError(), "IPEndPoint.ToString: Failed to WSAAddressToString.")
53 Else
54 Return New String(temp)
55 End If
56 End Function
57
58 /*!
59 @brief IPEndPointが表すIPアドレスを取得する
60 @return IPAddressクラス
61 */
62 Function Address() As IPAddress
63 Return New IPAddress(socketAddress)
64 End Function
65
66 /*!
67 @brief ポート番号を設定する
68 @param ポート番号(ホストバイトオーダー)
69 */
70 Sub Port(port As Word)
71 Select Case AddressFamily
72 Case System.Net.Sockets.AddressFamily.InterNetwork
73 Dim addr4 = socketAddress.Items As *sockaddr_in
74 addr4->sin_port = htons(port)
75 Case System.Net.Sockets.AddressFamily.InterNetworkV6
76 Dim addr6 = socketAddress.Items As *sockaddr_in6
77 addr6->sin6_port = htons(port)
78 Case Else
79 Throw New NotSupportedException("IPEndPoint.Port: Unknown AddressFamily.")
80 End Select
81 End Sub
82
83 /*!
84 @brief ポート番号を取得する
85 @return ポート番号(ホストバイトオーダー)
86 */
87 Function Port() As Word
88 Select Case AddressFamily
89 Case System.Net.Sockets.AddressFamily.InterNetwork
90 Dim addr4 = socketAddress.Items As *sockaddr_in
91 Return ntohs(addr4->sin_port)
92 Case System.Net.Sockets.AddressFamily.InterNetworkV6
93 Dim addr6 = socketAddress.Items As *sockaddr_in6
94 Return ntohs(addr6->sin6_port)
95 Case Else
96 Throw New NotSupportedException("IPEndPoint.Port: Unknown AddressFamily.")
97 End Select
98 End Function
99
100 /*!
101 @brief 最大のポート番号を取得する
102 @return ポート番号(ホストバイトオーダー)
103 */
104 Static Function MaxPort() As Word
105 Return &HFFFF
106 End Function
107
108 /*!
109 @brief 最小のポート番号を取得する
110 @return ポート番号(ホストバイトオーダー)
111 */
112 Static Function MinPort() As Word
113 Return 0
114 End Function
115
116Private
117
118 /*!
119 @brief IPAddressクラスとポート番号から初期化する
120 @param IPAddressクラス
121 @param ポート番号(ホストバイトオーダー)
122 */
123 Sub init(ip As IPAddress, port As Word)
124 socketAddress = New SocketAddress(ip.AddressFamily)
125 Select Case ip.AddressFamily
126 Case System.Net.Sockets.AddressFamily.InterNetwork
127 Dim addr4 = socketAddress.Items As *sockaddr_in
128 memcpy(VarPtr(addr4->sin_addr.s_addr), ip.Address, SizeOf(in_addr))
129 Case System.Net.Sockets.AddressFamily.InterNetworkV6
130 Dim addr6 = socketAddress.Items As *sockaddr_in6
131 memcpy(VarPtr(addr6->sin6_addr.s6_addr), ip.Address, SizeOf(in6_addr))
132 Case Else
133 Throw New NotSupportedException("IPEndPoint.init: Not Supported AddressFamily.")
134 End Select
135 Port = port
136 End Sub
137End Class
138
139End Namespace
140End Namespace
Note: See TracBrowser for help on using the repository browser.