目次へ

4.3. DatagramPacketクラス

DatagramPacketは、DatagramSocketを通して送受信されるUDPパケットを表すクラスです。DatagramPacketは主に次のような情報を保持しています。

  • データの通信相手のソケットアドレス(IPアドレス+ポート番号)
  • データのバイト列 

(サイドコーチ)実際のUDPパケットはパケットの送受信両端のIPアドレスとポート番号の情報を保持していますが、ローカルホスト側のポート番号はDatagramSocketクラスで管理されているため、DatagramPacketクラスではリモートホスト側の情報しか扱いません。

TCP通信では実際のパケットのやり取りは隠蔽されていましたが、UDP通信ではプログラマが意識して個々のパケットを取り扱わなければいけません。データを送信する際には、DatagramPacketのインスタンスを作成し、宛先のソケットアドレスを指定してやります。また、データの受信側でも、パケットを受け取るための入れ物として、DatagramPacketのインスタンスを用意しておく必要があります。これらの具体的な方法は、プログラムの実例の中で示していきます。

受信用のパケットを作成するためのコンストラクタは次の2つです。

  • public DatagramPacket(byte buf[], int length)
  • public DatagramPacket(byte buf[], int offset, int length)

送信用のパケットを作成するためのコンストラクタは次の4つです。

  • public DatagramPacket(byte buf[], int length, InetAddress addr, int port)
  • public DatagramPacket(byte buf[], int offset, int length, InetAddress addr, int port)
  • public DatagramPacket(byte buf[], int length, SocketAddress addr)
  • public DatagramPacket(byte buf[], int offset, int length, SocketAddress addr)

これらのコンストラクタを使用するには、データを格納するためのbyte型の配列(buf[])とその長さ(length)を指定する必要があります。lengthは配列bufのサイズより小さくても構いませんが、大きくてはいけません。offsetは配列bufのどの位置からをパケットのデータとして扱うかを指定します。offsetを指定しない場合、offsetは0(配列の先頭からパケットのデータが始まる)とみなされます。

送信用のパケットを作成するコンストラクタでは、送信先のアドレスをSocketAddressで指定するか、InetAddressとポート番号の組み合わせで指定します。送信先アドレスは、setSocketAddressメソッド等で後から設定、変更することもできます。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp