1 |
|
---|
2 | /*!
|
---|
3 | @brief インターネットワーク端末のアドレスを表します。
|
---|
4 | @author OverTaker
|
---|
5 | @date 2008/10/18
|
---|
6 | */
|
---|
7 |
|
---|
8 |
|
---|
9 |
|
---|
10 | Namespace System
|
---|
11 | Namespace Net
|
---|
12 |
|
---|
13 |
|
---|
14 | Class IPEndPoint
|
---|
15 | Inherits EndPoint
|
---|
16 | Public
|
---|
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 |
|
---|
133 | Private
|
---|
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
|
---|
154 | End Class
|
---|
155 |
|
---|
156 | End Namespace
|
---|
157 | End Namespace
|
---|