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

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

IPHostEntry,Dnsクラスを半分実装。getaddrinfoがXPSP1以降にしかないので、gethostbyname版の実装もあとでします。

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