Javaネットワークの概要

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

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

アドレス指定

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

IPアドレス指定には、InetAddressInet4Addressおよび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のサブクラスです。

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の別のサブセットです。ただし、これを表すJavaクラスはありません。

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

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

詳しい説明を参照[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は、ホスト、オプションのポート範囲およびそのホスト上で実行できる一連のアクション(connectacceptlistenresolve)で構成されます。これは、1つのSocketPermissionが、別のPermissionと等しいかどうか、あるいは別のPermissionを意味するかどうかを判断するためのメソッドを含んでいます。SocketPermissionPermissionCollectionに含めると、アクセス権の有無を簡単にチェックできるようになります。

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

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

 


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