Java ネットワークの概要

Java ネットワーク API (java.net) は、次の機能を実行するためのインタフェース/クラスを提供します。

このドキュメントの目的は、java.net パッケージが提供する機能の概要を説明することです。インタフェース、クラス、およびファクトリの詳細については、ネットワーク API を参照してください。ネットワークの基本的な概念については、「The Java Tutorial」の探求: カスタムネットワークに関するトピックを参照してください。

アドレス指定

java.net は、次のアドレス指定関連クラスを提供します。

IP アドレス指定には、InetAddressInet4Address、および Inet6Address という 3 つのクラスが提供されています。InetAddress は、32 ビットまたは 128 ビットの符号が付けられてない数値で、IP プロトコルによって使用される IP アドレスを表します。IP プロトコルは、TCP や UDP の構築基盤となる下位レベルのプロトコルです。32 ビットの IPv4 アドレスを表すために、Inet4Address が提供されています。IPv4 アドレスは、nnn.nnn.nnn.nnn というよく知られる形式で指定します。n は整数を示し、たとえば 192.0.2.254 のようになります。これは InetAddress のサブクラスです。128 ビットの IPv6 アドレスを表すために、Inet6Address が提供されています。これも InetAddress のサブクラスです。

InetAddress から Inet4Address および Inet6Address への論理フローを示したフローチャート

ソケットアドレス指定には、SocketAddressInetSocketAddress という 2 つのクラスが提供されています。SocketAddress は、特定のプロトコルに依存しない抽象的なソケットアドレスです。このクラスは、特定プロトコル用のサブクラスの作成を目的としています。次の InetSocketAddress は例です。InetSocketAddress は、SocketAddress のサブクラスで、IP ソケットアドレスを表します。これは、IP アドレス (192.0.2.254 など) とポート (80 など)、ホスト名 (example.com など) とポート (1000 など)、またはポートだけ (1010 など) を含むことができます。後者の場合、ワイルドカードの IP アドレスと想定されます。

SocketAddress と InetSocketAddress の間の論理フローを示す図

TCP 接続の確立

次のクラスは、通常の TCP 接続の確立に関係するクラスです。

クライアントとサーバー間の単純な接続の場合、通常、ServerSocketSocket だけで必要な機能はすべて提供されます。

ServerSocket は、サーバー上でクライアントからのサービス要求を待機するソケットを表します。Socket は、サーバーとクライアント間の通信のエンドポイントを表します。サーバーは、サービスの要求を受け取ると、クライアントとの通信のために Socket を作成し、引き続き ServerSocket 上でほかの要求を待機します。クライアントもサーバーとの通信のために Socket を作成します。次の図にその流れを示します。

詳しい説明を参照[D]

接続の確立後に、ソケット間の通信で、getInputStream()getOutputSteam() が使用される場合があります。

UDP を使用したデータグラムパケットの送受信

次は、UDP を使用したデータグラムパケットの送受信に関係しています。

DatagramPacket は、データグラムパケットを表します。データグラムパケットは、無接続配信で使用され、通常は宛先のアドレスとポートに関する情報が含まれています。DatagramSocket は、ネットワーク上で UDP を使用してデータグラムパケットを送受信するために使用されるソケットを表します。DatagramPacket は、send(DatagramPacket dp) のように DatagramPacket を引数として使用して DatagramSocketsend(...) メソッドを呼び出すことで DatagramSocket から送信されます。DatagramPacket を受信するには receive(DatagramPacket dp) を使用します。MulticastSocket クラスを使用すると、マルチキャストグループに対する DatagramPacket の送受信を行うことができます。これは、マルチキャスティング機能を追加するための DatagramSocket のサブクラスです。

詳しい説明を参照[D]

ネットワークリソースの検索と識別

次のクラスは、ネットワークリソースの検索と識別に関係しています。

もっとも一般的に使用されるクラスは、URIURLURLConnection、および HttpURLConnection です。

URI は、リソース用の URI (Uniform Resource Identifier) を表します。URI は、リソースの識別子ですが、そのリソースのロケータになる必要はありません。URL は、リソース用の URL (Uniform Resource Locator) を表します。URL は URI のサブセットですが、URL クラスは、URI クラスのサブクラスではありません。つまり、URL はリソースへのアクセス方法を示し、URI はアクセス方法を示す場合と示さない場合があります。Uniform Resource Name (URN) も URI の別のサブセットです。ただし、URN を表す Java クラスはありません。

URI のサブクラスとしての URL と URN を示す図。

URLConnection は、アプリケーションと、URL によって識別されるネットワークリソースとの間の接続を表すすべてのクラスの abstract スーパークラスです。URL が指定され、それによりプロトコルが指定されると、URL.openConnection() は、そのプロトコルの URLConnection の適切な実装のインスタンスを返します。プロトコルは、URL から認識されます。このインスタンスは、実際に接続を開き、URL にアクセスする URLConnection.connect() を提供します。

詳しい説明を参照[D]

HttpURLConnection は、もっとも一般的に使用される URLConnection の実装です。これは、Web サーバーのコンテンツにアクセスするために使用される http プロトコル用の実装です。上の図では、URL のアクセスプロトコルが http の場合、openConnection() メソッドによって HttpURLConnection のインスタンスが返されます。

セキュリティー

セキュリティーに関しては、認証とアクセス権に関係するクラスを使用します。認証は、ユーザーの認証に関係し、ユーザー名とパスワードのチェックを含みます。ユーザーが URL にアクセスしようとした場合など、多くの場合、ユーザーの認証が必要になります。アクセス権は、実行可能なアクションに関係します。たとえば、NetPermission オブジェクト "setDefaultAuthenticator" が存在しない場合に、Authenticator.setDefault(Authenticator a) メソッドを呼び出だすと、セキュリティー例外が発生します。

認証

プロキシや元のサーバーの一部では、BASIC や DIGEST などの認証スキームを使用した認証情報が必要です。たとえばプロキシ経由で http による接続を行い、プロキシでは認証が必要なときは、Authenticator クラスを呼び出してユーザー名、パスワード、および認証に必要なその他の項目を取得します。認証に関連するクラスは次のとおりです。

ユーザー認証のためのメソッドだけでなく、abstract クラスである Authenticator には、要求されている認証についてクエリーするメソッドもあります (getRequestingXXX() 参照)。通常これは、サブクラス化され、setDefault(Authenticator a) を呼び出すことによってサブクラスのインスタンスがシステムに登録されます。セキュリティーマネージャーが存在する場合は、セキュリティーマネージャーが、セキュリティーポリシーによって NetPermission "setDefaultAthenticator" が許可されるかどうかをチェックします。システムが認証を必要とする場合、システムは、requestPasswordAuthentication() などのメソッドを呼び出します。

PasswordAuthentication は、単純にユーザー名とパスワードを格納するデータホルダーです。

アクセス権

SocketPermission は、接続受け入れ待機解決などのそのホスト上で実行できる一連のアクションと、ホストおよびオプションのポート範囲で構成されます。これは、1 つの SocketPermission が、別の Permission と等しいかどうか、あるいは別の Permission を意味するかどうかを判断するためのメソッドを含んでいます。SocketPermissionPermissionCollection に含めると、アクセス権の有無を簡単にチェックできるようになります。

NetPermission は、さまざまな名前付きネットワークアクセス権を表すためのクラスです。現在、上記の setDefaultAuthenticatorrequestPasswordAuthentication、および specifyStreamHandler の 3 つがあります。NetPermissionPermissionCollection に含めると、アクセス権の有無を簡単にチェックできるようになります。

アクセス権の詳細は、「アクセス権」のトピックを参照してください。

 


Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.