Java ネットワーク API (java.net) は、次の機能を実行するためのインタフェース/クラスを提供します。
このドキュメントの目的は、java.net パッケージが提供する機能の概要を説明することです。インタフェース、クラス、およびファクトリの詳細については、ネットワーク API を参照してください。ネットワークの基本的な概念については、「The Java Tutorial」の探求: カスタムネットワークに関するトピックを参照してください。
java.net は、次のアドレス指定関連クラスを提供します。
InetAddressInet4AddressInet6AddressSocketAddressInetSocketAddressIP アドレス指定には、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 接続の確立に関係するクラスです。
ServerSocketSocketクライアントとサーバー間の単純な接続の場合、通常、ServerSocket と Socket だけで必要な機能はすべて提供されます。
ServerSocket は、サーバー上でクライアントからのサービス要求を待機するソケットを表します。Socket は、サーバーとクライアント間の通信のエンドポイントを表します。サーバーは、サービスの要求を受け取ると、クライアントとの通信のために Socket を作成し、引き続き ServerSocket 上でほかの要求を待機します。クライアントもサーバーとの通信のために Socket を作成します。次の図にその流れを示します。
接続の確立後に、ソケット間の通信で、getInputStream() と getOutputSteam() が使用される場合があります。
次は、UDP を使用したデータグラムパケットの送受信に関係しています。
DatagramPacketDatagramSocketDatagramPacket は、データグラムパケットを表します。データグラムパケットは、無接続配信で使用され、通常は宛先のアドレスとポートに関する情報が含まれています。DatagramSocket は、ネットワーク上で UDP を使用してデータグラムパケットを送受信するために使用されるソケットを表します。DatagramPacket は、send(DatagramPacket dp) のように DatagramPacket を引数として使用して DatagramSocket の send(...) メソッドを呼び出すことで DatagramSocket から送信されます。DatagramPacket を受信するには receive(DatagramPacket dp) を使用します。MulticastSocket クラスを使用すると、マルチキャストグループに対する DatagramPacket の送受信を行うことができます。これは、マルチキャスティング機能を追加するための DatagramSocket のサブクラスです。
次のクラスは、ネットワークリソースの検索と識別に関係しています。
URIURLURLClassLoaderURLConnectionURLStreamHandlerHttpURLConnectionJarURLConnectionもっとも一般的に使用されるクラスは、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() メソッドによって HttpURLConnection のインスタンスが返されます。
セキュリティーに関しては、認証とアクセス権に関係するクラスを使用します。認証は、ユーザーの認証に関係し、ユーザー名とパスワードのチェックを含みます。ユーザーが URL にアクセスしようとした場合など、多くの場合、ユーザーの認証が必要になります。アクセス権は、実行可能なアクションに関係します。たとえば、NetPermission オブジェクト "setDefaultAuthenticator" が存在しない場合に、Authenticator.setDefault(Authenticator a) メソッドを呼び出だすと、セキュリティー例外が発生します。
プロキシや元のサーバーの一部では、BASIC や DIGEST などの認証スキームを使用した認証情報が必要です。たとえばプロキシ経由で http による接続を行い、プロキシでは認証が必要なときは、Authenticator クラスを呼び出してユーザー名、パスワード、および認証に必要なその他の項目を取得します。認証に関連するクラスは次のとおりです。
AuthenticatorPasswordAuthenticationユーザー認証のためのメソッドだけでなく、abstract クラスである Authenticator には、要求されている認証についてクエリーするメソッドもあります (getRequestingXXX() 参照)。通常これは、サブクラス化され、setDefault(Authenticator a) を呼び出すことによってサブクラスのインスタンスがシステムに登録されます。セキュリティーマネージャーが存在する場合は、セキュリティーマネージャーが、セキュリティーポリシーによって NetPermission "setDefaultAthenticator" が許可されるかどうかをチェックします。システムが認証を必要とする場合、システムは、requestPasswordAuthentication() などのメソッドを呼び出します。
PasswordAuthentication は、単純にユーザー名とパスワードを格納するデータホルダーです。
SocketPermissionNetPermissionSocketPermission は、接続、受け入れ、待機、解決などのそのホスト上で実行できる一連のアクションと、ホストおよびオプションのポート範囲で構成されます。これは、1 つの SocketPermission が、別の Permission と等しいかどうか、あるいは別の Permission を意味するかどうかを判断するためのメソッドを含んでいます。SocketPermission を PermissionCollection に含めると、アクセス権の有無を簡単にチェックできるようになります。
NetPermission は、さまざまな名前付きネットワークアクセス権を表すためのクラスです。現在、上記の setDefaultAuthenticator、requestPasswordAuthentication、および specifyStreamHandler の 3 つがあります。NetPermission を PermissionCollection に含めると、アクセス権の有無を簡単にチェックできるようになります。
アクセス権の詳細は、「アクセス権」のトピックを参照してください。