Java ネットワーク API (java.net
) は、次の機能を実行するためのインタフェース/クラスを提供します。
このドキュメントの目的は、java.net
パッケージが提供する機能の高レベルな概要を説明することです。 インタフェース、クラス、およびファクトリの詳細については、「Networking API」 を参照してください。 ネットワークの基本的な概念については、「Java Tutorial」の「Trail: Custom Networking」を参照してください。
java.net
は、以下のアドレス関連クラスを提供します。
IP アドレス指定には、InetAddress
、Inet4Address
、および Inet6Address
という 3 つのクラスが提供されています。 InetAddress
は、32 ビットまたは 128 ビットの符号が付けられてない数値で、IP プロトコルによって使用される IP アドレスを表します。IP プロトコルは、TCP や UDP の構築基盤となる下位レベルのプロトコルです。 32 ビットの IPv4 アドレスを表すために、Inet4Address
が提供されています。 IPv4 アドレスは、nnn.nnn.nnn.nnn
というよく知られる形式で指定します。n
は整数を示し、たとえば 129.250.35.250
のようになります。 このクラスは InetAddress
のサブクラスです。 128 ビットの IPv6 アドレスを表すために、Inet6Address
が提供されています。 このクラスも InetAddress
のサブクラスです。
ソケットアドレス指定には、SocketAddress
と InetSocketAddress
という 2 つのクラスが提供されています。 SocketAddress
は、特定のプロトコルに依存しない抽象的なソケットアドレスです。 このクラスは、特定プロトコル用のサブクラスの作成を目的としています。 次の InetSocketAddress
は、このサブクラスの例です。 InetSocketAddress
は、SocketAddress
のサブクラスで、IP ソケットアドレスを表します。 このアドレスは、IP アドレス (例 129.250.35.250
) とポート (例 80
)、ホスト名 (例 coastnews.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)
引数のように、DatagramSocket
の send(...)
メソッドを呼び出し、DatagramPacket
を渡すことによって、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
によって識別されるネットワークリソースとの間の接続を表す抽象スーパークラスです。 URL
が指定され、それによりプロトコルが指定されると、URL.openConnection()
は、そのプロトコルの URLConnection
の適切な実装を返します。 プロトコルは、URL
から認識することができます。 このインスタンスは、実際に接続を開き URL
にアクセスする URLConnection.connect()
を提供します。
HttpURLConnection
は、最も一般的に使用される URLConnection
の実装です。 これは、Web サーバのコンテンツにアクセスするために使用される http
プロトコル用の実装です。 上の図では、URL
のアクセスプロトコルが http
の場合、openConnection()
メソッドによって HttpURLConnection
のインスタンスが返されます。
セキュリティに関しては、認証とアクセス権に関係するクラスを使用します。 認証は、ユーザの認証に関係し、ユーザ名とパスワードのチェックを含みます。 ユーザが URL にアクセスしようとした場合など、多くの場合、ユーザの認証が必要になります。 アクセス権は、実行可能な処理に関係します。たとえば、NetPermission
オブジェクト setDefaultAuthenticator
が存在しない場合に、Authenticator.setDefault(Authenticator a)
を呼び出だすと、セキュリティ例外が発生します。
Authenticator
PasswordAuthentication
抽象クラス Authenticator
にはネットワーク接続を認証するためのメソッドが含まれます。 通常このクラスは、サブクラス化され、setDefault(Authenticator a)
を呼び出すことによってサブクラスのインスタンスがシステムに登録されます。 セキュリティマネージャが存在する場合は、セキュリティマネージャが、セキュリティポリシーによって NetPermission
「setDefaultAthenticator
」 が許可されるかどうかをチェックします。 システムが認証を必要とする場合、システムは、getPasswordAuthentication()
などのメソッドを呼び出します。
PasswordAuthentication
は、単純にユーザ名とパスワードを格納するデータホルダーです。
SocketPermission
NetPermission
SocketPermission
は、接続、受け入れ、待機、解決などのそのホスト上で実行できる一連の処理と、ホストおよびオプションのポート範囲で構成されます。 このクラスは、1 つの SocketPermission
が、別の Permission
と等しいかどうか、あるいは別の Permission
を意味するかどうかを判断するためのメソッドを含んでいます。 SocketPermission
を PermissionCollection
に含めると、アクセス権の有無を簡単にチェックできるようになります。
NetPermission
は、さまざまな名前付きネットワークアクセス権を表すためのクラスです。 現在、上記の setDefaultAuthenticator
、requestPasswordAuthentication
、および specifyStreamHandler
の 3 つのネットワークアクセス権があります。 NetPermission
を PermissionCollection
に含めると、アクセス権の有無を簡単にチェックできるようになります。
アクセス権の詳細については、http://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/permissions.html を参照してください。