JavaネットワークAPI (java.net
)は、次の機能を実行するためのインタフェース/クラスを提供します。
このドキュメントの目的は、java.net
パッケージが提供する機能の概要を説明することです。 インタフェース、クラス、およびファクトリの詳細については、ネットワークAPIを参照してください。 ネットワークの基本的な概念については、「The Java Tutorial」の探求: カスタム・ネットワークに関するトピックを参照してください。
java.net
は、次のアドレス指定関連クラスを提供します。
InetAddress
Inet4Address
Inet6Address
SocketAddress
InetSocketAddress
IPアドレス指定には、InetAddress
、Inet4Address
およびInet6Address
という3つのクラスが提供されています。 InetAddress
はIPアドレスを表します。これは、TCPやUDPなどのプロトコルの構築基盤となる下位レベルのプロトコルであるIPによって使用される32ビットまたは128ビットの符号なし数値です。 32ビットのIPv4アドレスを表すために、Inet4Address
が提供されています。 (IPv4アドレスは、nnn.nnn.nnn.nnn
というよく知られる形式で指定します。n
は整数を示し、たとえば192.0.2.254
のようになります。) これはInetAddress
のサブクラスです。 128ビットのIPv6アドレスを表すために、Inet6Address
が提供されています。 これもInetAddress
のサブクラスです。
ソケット・アドレス指定には、SocketAddress
とInetSocketAddress
という2つのクラスが提供されています。 SocketAddress
は、特定のプロトコルに依存しない抽象的な
ソケット・アドレスです。 このクラスは、特定プロトコル用のサブクラスの作成を目的としています。 次のInetSocketAddress
は例です。 InetSocketAddress
は、SocketAddress
のサブクラスで、IPソケット・アドレスを表します。 これは、IPアドレス(192.0.2.254
など)とポート(80
など)、ホスト名(example.com
など)とポート(1000
など)、またはポートだけ(1010
など)を含むことができます。 後者の場合、ワイルドカードのIPアドレスと想定されます。
次のクラスは、通常のTCP接続の確立に関係するクラスです。
ServerSocket
Socket
クライアントとサーバー間の単純な接続の場合、通常、ServerSocket
とSocket
だけで必要な機能はすべて提供されます。
ServerSocket
は、サーバー上でクライアントからのサービス要求を待機するソケットを表します。 Socket
は、サーバーとクライアント間の通信のエンド・ポイントを表します。 サーバーは、サービスの要求を受け取ると、クライアントとの通信のためにSocket
を作成し、引き続きServerSocket
上でほかの要求を待機します。 クライアントもサーバーとの通信のためにSocket
を作成します。 次の図にその流れを示します。
接続の確立後に、ソケット間の通信で、getInputStream()
とgetOutputSteam()
が使用される場合があります。
次は、UDPを使用したデータグラム・パケットの送受信に関係しています。
DatagramPacket
DatagramSocket
DatagramPacket
は、データグラム・パケットを表します。 データグラム・パケットは、無接続配信で使用され、通常は宛先のアドレスとポートに関する情報が含まれています。 DatagramSocket
は、ネットワーク上でUDPを使用してデータグラム・パケットを送受信するために使用されるソケットを表します。 DatagramPacket
は、send(DatagramPacket dp)
のようにDatagramPacket
を引数として使用してDatagramSocket
のsend(...)
メソッドを呼び出すことでDatagramSocket
から送信されます。DatagramPacket
を受信するには、receive(DatagramPacket dp)
を使用します。 (MulticastSocket
クラスを使用すると、マルチキャスト・グループに対するDatagramPacket
の送受信を行うことができます。 これは、マルチキャスティング機能を追加するためのDatagramSocket
のサブクラスです。)
次のクラスは、ネットワーク・リソースの検索と識別に関係しています。
URI
URL
URLClassLoader
URLConnection
URLStreamHandler
HttpURLConnection
JarURLConnection
もっとも一般的に使用されるクラスは、URI
、URL
、URLConnection
、およびHttpURLConnection
です。
URI
は、リソース用のURI (Uniform Resource Identifier)を表します。URIは、リソースの識別子ですが、そのリソースのロケータになる必要はありません。 URL
は、リソース用のURL (Uniform Resource Locator)を表します。 URLはURIのサブセットですが、URL
クラスは、URI
クラスのサブクラスではありません。 つまり、URLはリソースへのアクセス方法を示し、URIはアクセス方法を示す場合と示さない場合があります。 Uniform Resource Name (URN
)もURI
の別のサブセットです。 ただし、これを表すJavaクラスはありません。
URLConnection
は、アプリケーションと、URL
によって識別されるネットワーク・リソースとの間の接続を表すすべてのクラスのabstractスーパー・クラスです。 URL
が指定され、それによりプロトコルが指定されると、URL.openConnection()
は、そのプロトコルのURLConnection
の適切な実装のインスタンスを返します。 プロトコルは、URL
から認識されます。 このインスタンスは、URLConnection.connect()
メソッドを使用して、実際に接続を開き、URL
にアクセスする手段を提供します。
HttpURLConnection
は、もっとも一般的に使用されるURLConnection
の実装です。 これは、Webサーバーのコンテンツにアクセスするために使用されるhttp
プロトコル用の実装です。 上の図では、URL
のアクセス・プロトコルがhttp
の場合、openConnection()
メソッドによってHttpURLConnectio
nのインスタンスが返されます。
セキュリティに関しては、認証とアクセス権に関係するクラスを使用します。 認証は、ユーザーの認証に関係し、ユーザー名とパスワードのチェックを含みます。 ユーザーがURLにアクセスしようとした場合など、多くの場合、ユーザーの認証が必要になります。 アクセス権は、実行可能なアクションに関係します。たとえば、NetPermission
オブジェクト"setDefaultAuthenticator
"が存在しない場合に、Authenticator.setDefault(Authenticator a)
メソッドを呼び出すと、セキュリティ例外が発生します。
プロキシやオリジン・サーバーの一部では、BASICやDIGESTなどの認証スキームを使用した認証情報が必要です。 たとえばプロキシ経由でhttpによる接続を行い、プロキシでは認証が必要なときは、Authenticator
クラスを呼び出してユーザー名、パスワード、および認証に必要なその他の項目を取得します。 認証に関連するクラスは次のとおりです。
Authenticator
PasswordAuthentication
ユーザー認証のためのメソッドだけでなく、abstract
クラスであるAuthenticator
には、要求されている認証についてクエリーするメソッドもあります(getRequestingXXX()
参照)。 通常これは、サブクラス化され、setDefault(Authenticator a)
を呼び出すことによってサブクラスのインスタンスがシステムに登録されます。 セキュリティ・マネージャが存在する場合は、セキュリティ・マネージャが、セキュリティ・ポリシーによってNetPermission
"setDefaultAthenticator
"が許可されるかどうかをチェックします。 システムが認証を必要とする場合、システムは、requestPasswordAuthentication()
などのメソッドを呼び出します。
PasswordAuthentication
は、単純にユーザー名とパスワードを格納するデータ・ホルダーです。
SocketPermission
NetPermission
SocketPermission
は、ホスト、オプションのポート範囲およびそのホスト上で実行できる一連のアクション(connect
、accept
、listen
、resolve
)で構成されます。 これは、1つのSocketPermission
が、別のPermission
と等しいかどうか、あるいは別のPermissionを意味するかどうかを判断するためのメソッドを含んでいます。 SocketPermission
をPermissionCollection
に含めると、アクセス権の有無を簡単にチェックできるようになります。
NetPermission
は、さまざまな名前付きネットワーク・アクセス権を表すためのクラスです。 現在、上記のsetDefaultAuthenticator
、requestPasswordAuthentication
、およびspecifyStreamHandler
の3つがあります。 NetPermission
をPermissionCollection
に含めると、アクセス権の有無を簡単にチェックできるようになります。
アクセス権の詳細は、「アクセス権」のトピックを参照してください。