Java ネットワーク API (java.net
) は、次の機能を実行するためのインタフェース/クラスを提供します。
このドキュメントの目的は、java.net
パッケージが提供する機能の概要を説明することです。インタフェース、クラス、およびファクトリの詳細については、ネットワーク API を参照してください。ネットワークの基本的な概念については、「The Java Tutorial」の探求: カスタムネットワークに関するトピックを参照してください。
java.net
は、次のアドレス指定関連クラスを提供します。
InetAddress
Inet4Address
Inet6Address
SocketAddress
InetSocketAddress
IP アドレス指定には、InetAddress
、Inet4Address
、および 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
のサブクラスです。
ソケットアドレス指定には、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
の別のサブセットです。ただし、URN を表す Java クラスはありません。
URLConnection
は、アプリケーションと、URL
によって識別されるネットワークリソースとの間の接続を表すすべてのクラスの abstract スーパークラスです。URL
が指定され、それによりプロトコルが指定されると、URL.openConnection()
は、そのプロトコルの URLConnection
の適切な実装のインスタンスを返します。プロトコルは、URL
から認識されます。このインスタンスは、実際に接続を開き、URL
にアクセスする URLConnection.connect()
を提供します。
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
は、接続
、受け入れ
、待機
、解決
などのそのホスト上で実行できる一連のアクションと、ホストおよびオプションのポート範囲で構成されます。これは、1 つの SocketPermission
が、別の Permission
と等しいかどうか、あるいは別の Permission を意味するかどうかを判断するためのメソッドを含んでいます。SocketPermission
を PermissionCollection
に含めると、アクセス権の有無を簡単にチェックできるようになります。
NetPermission
は、さまざまな名前付きネットワークアクセス権を表すためのクラスです。現在、上記の setDefaultAuthenticator
、requestPasswordAuthentication
、および specifyStreamHandler
の 3 つがあります。NetPermission
を PermissionCollection
に含めると、アクセス権の有無を簡単にチェックできるようになります。
アクセス権の詳細は、「アクセス権」のトピックを参照してください。