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 | @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 |
|
---|
116 | Private
|
---|
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
|
---|
137 | End Class
|
---|
138 |
|
---|
139 | End Namespace
|
---|
140 | End Namespace
|
---|