2. ソケット
- 2.1. ソケット
- 2.2. InetAddressクラス
- 2.3. SocketAddress/InetSocketAddressクラス
- 2.4. Socketクラス
- 2.5. TCPサーバプログラム
- 2.6. TCPクライアントプログラム
- 2.7. プログラムの実行
この節ではソケットを利用した通信プログラムを学びます。まずソケットとは何であるかを説明し、そのあとプログラムを通してクライアントアプリケーションでのソケットの利用方法を説明します。
2.1. ソケット
ソケットはTCPやUDPなどの通信の終端です。TCPやUDPの通信は必ず両端がソケットで終端されています。ソケットは、コンピュータの特定のポート番号と関連づけられます。ポート番号で識別できるため、一台のホストで複数のソケットを同時に取り扱うことが可能です。アプリケーションプログラムの通信処理は、ソケットに対して読み書きすることで実現されます。
ソケットを表現するクラスには次の4つが用意されています。これらのクラスはすべてjava.netパッケージに含まれています。IP通信を行うためのクラスの多くはjava.netパッケージに含まれます。
クラス
|
説明 |
Socket
|
TCP用のソケット |
ServerSocket
|
TCP用のサーバソケット(新しい接続を受け付けるソケット) |
DatagramSocket
|
UDP用のソケット |
MulticastSocket
|
UDPのマルチキャスト用ソケット |
2.2. InetAddressクラス
InetAddressはIPアドレスを取り扱うためのクラスです。IPアドレスはIPv4とIPv6でデータの長さや表現方法が異なるため、それぞれInetAddressのサブクラスであるInet4AddressとInet6Addressで表現されます。
InetAddressのインスタンスを新しく生成するには、通常はコンストラクタは用いません。次のようなInetAddressクラスのstaticメソッドを利用して生成します。
- static InetAddress getByAddress(byte[] address);
- static InetAddress getByAddress(String name, byte[] address);
- static InetAddress getName (String name);
InetAddressは、ホスト名またはIPアドレス(もしくはその両方)を指定して作成することができます。addressにはIPアドレスのバイト配列を指定し、nameにはホスト名を指定します。nameにはIPアドレスの文字列表現を指定することもできます。例えば、次の二つの文は全く同じ結果を返します(211はbyte型の範囲(-128〜127)を超えているためキャストしています) 。
- InetAddress adr = InetAddress.getByAddress(new byte[] { (byte)211, 125, 78, 77 });
- InetAddress adr = InetAddress.getByName("211,125,78,77");