JavaTM 2 Platform
Std. Ed. v1.3

java.net
クラス DatagramSocket

java.lang.Object
  |
  +--java.net.DatagramSocket
直系の既知のサブクラス:
MulticastSocket

public class DatagramSocket
extends Object

このクラスは、データグラムを送受信するためのソケットを表します。

データグラムソケットは、パケット配信サービスの送信点または受信点です。データグラムソケット上で送信または受信する各パケットは、それぞれ異なるアドレスで経路を指定されます。あるマシンから別のマシンに複数のパケットを送信する場合、各パケットは異なる経路で送信される可能性があり、宛先には任意の順序で到達する可能性があります。

UDP ブロードキャストの送信および受信は、DatagramSocket 上で常に有効になっています。

導入されたバージョン:
JDK1.0
関連項目:
DatagramPacket

コンストラクタの概要
DatagramSocket()
          データグラムソケットを構築し、ローカルホストマシン上の使用可能なポートにバインドします。
DatagramSocket(int port)
          データグラムソケットを構築し、ローカルホストマシン上の指定されたポートにバインドします。
DatagramSocket(int port, InetAddress laddr)
          指定されたローカルアドレスにバインドされたデータグラムソケットを作成します。
 
メソッドの概要
 void close()
          このデータグラムソケットを閉じます。
 void connect(InetAddress address, int port)
          このソケットのリモートアドレスに、ソケットを接続します。
 void disconnect()
          ソケットを切断します。
 InetAddress getInetAddress()
          ソケットが接続されているアドレスを返します。
 InetAddress getLocalAddress()
          ソケットのバインド先のローカルアドレスを取得します。
 int getLocalPort()
          このソケットのバインド先となる、ローカルホスト上のポート番号を返します。
 int getPort()
          このソケットのためのポートを返します。
 int getReceiveBufferSize()
          この DatagramSocket で使われる SO_RCVBUF オプションの値を取得します。
 int getSendBufferSize()
          この DatagramSocket で使われる SO_SNDBUF オプションの値を取得します。
 int getSoTimeout()
          SO_TIMEOUT の設定を取得します。
 void receive(DatagramPacket p)
          このソケットからのデータグラムパケットを受信します。
 void send(DatagramPacket p)
          このソケットからデータグラムパケットを送信します。
static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac)
          アプリケーションのデータグラムソケット実装ファクトリを設定します。
 void setReceiveBufferSize(int size)
          SO_RCVBUF オプションを、この DatagramSocket に指定された値に設定します。
 void setSendBufferSize(int size)
          SO_SNDBUF オプションを、この DatagramSocket に指定された値に設定します。
 void setSoTimeout(int timeout)
          指定された待ち時間 (ミリ秒単位) を使用して、SO_TIMEOUT を有効または無効にします。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

DatagramSocket

public DatagramSocket()
               throws SocketException
データグラムソケットを構築し、ローカルホストマシン上の使用可能なポートにバインドします。

セキュリティマネージャが存在する場合、まずセキュリティマネージャの checkListen が、引数として 0 を指定して呼び出され、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

例外:
SocketException - ソケットを開くことができなかった場合、あるいは指定されたローカルポートにソケットをバインドできなかった場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
関連項目:
SecurityManager.checkListen(int)

DatagramSocket

public DatagramSocket(int port)
               throws SocketException
データグラムソケットを構築し、ローカルホストマシン上の指定されたポートにバインドします。

セキュリティマネージャが存在する場合、まずセキュリティマネージャの checkListen メソッドが、引数として port を指定して呼び出され、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

パラメータ:
port - 使用するポート
例外:
SocketException - ソケットを開くことができなかった場合、あるいは指定されたローカルポートにソケットをバインドできなかった場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
関連項目:
SecurityManager.checkListen(int)

DatagramSocket

public DatagramSocket(int port,
                      InetAddress laddr)
               throws SocketException
指定されたローカルアドレスにバインドされたデータグラムソケットを作成します。ローカルポートは、0 〜 65535 までの範囲で指定します。

セキュリティマネージャが存在する場合、まずセキュリティマネージャの checkListen メソッドが、引数として port を指定して呼び出され、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

パラメータ:
port - 使用するローカルポート
laddr - バインド先のローカルアドレス
例外:
SocketException - ソケットを開くことができなかった場合、あるいは指定されたローカルポートにソケットをバインドできなかった場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkListen メソッドがこの操作を許可しない場合
導入されたバージョン:
JDK1.1
関連項目:
SecurityManager.checkListen(int)
メソッドの詳細

connect

public void connect(InetAddress address,
                    int port)
このソケットのリモートアドレスに、ソケットを接続します。ソケットがリモートアドレスに接続されると、パケットはそのアドレスとの間でだけ送受信されます。デフォルトでは、データグラムソケットは接続されません。

指定されたホストおよびポートとのデータグラムの送受信を行うための呼び出し側のアクセス権は、接続時に確認されます。ソケットが接続されたとき、送受信ではパケットの受信および送信に対するセキュリティチェックを行いません。ただし、パケットとソケットのアドレスおよびポートが一致するかどうかの確認は行います。送信の処理では、パケットのアドレスが設定されている場合に、パケットのアドレスとソケットのアドレスが一致しないときは、IllegalArgumentException がスローされます。マルチキャストアドレスに接続されているソケットは、送信パケットだけに使用できます。

パラメータ:
address - ソケットが使うリモートアドレス
port - ソケットが使うリモートポート
例外:
IllegalArgumentException - アドレスが無効である場合、あるいはポートが範囲外の場合
SecurityException - 指定されたアドレスおよびポートとのデータグラムの送受信が、呼び出し側に許可されていない場合
関連項目:
disconnect(), send(java.net.DatagramPacket), receive(java.net.DatagramPacket)

disconnect

public void disconnect()
ソケットを切断します。ソケットが接続されていない場合は、何も行いません。
関連項目:
connect(java.net.InetAddress, int)

getInetAddress

public InetAddress getInetAddress()
ソケットが接続されているアドレスを返します。ソケットが接続されていない場合は null を返します。
戻り値:
ソケットが接続されているアドレス

getPort

public int getPort()
このソケットのためのポートを返します。ソケットが接続されていない場合は -1 を返します。
戻り値:
このソケットが接続されているポート

send

public void send(DatagramPacket p)
          throws IOException
このソケットからデータグラムパケットを送信します。DatagramPacket には、送信するデータ、データの長さ、リモートホストの IP アドレス、およびリモートホスト上のポート番号などの情報が格納されています。

セキュリティマネージャが存在する場合、ソケットがリモートアドレスに接続されていないときは、このメソッドはまずなんらかのセキュリティチェックを実行します。最初は、p.getAddress().isMulticastAddress() が true の場合、このメソッドはセキュリティマネージャの checkMulticast メソッドを、引数として p.getAddress() を指定して呼び出します。上記の式の結果が false の場合、このメソッドは代わりにセキュリティマネージャの checkConnect メソッドを、引数として p.getAddress().getHostAddress() および p.getPort() を指定して呼び出します。こうした操作が許可されていない場合、セキュリティマネージャの各メソッド呼び出しの結果は、 SecurityException になることがあります。

パラメータ:
p - 送信される DatagramPacket
例外:
IOException - 入出力エラーが発生した場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkMulticast メソッドまたは checkConnect が送信を許可しない場合
関連項目:
DatagramPacket, SecurityManager.checkMulticast(InetAddress), SecurityManager.checkConnect(java.lang.String, int)

receive

public void receive(DatagramPacket p)
             throws IOException
このソケットからのデータグラムパケットを受信します。このメソッドが復帰すると、DatagramPacket のバッファには受信したデータが格納されます。データグラムパケットには、送信者の IP アドレスと、送信者のマシンのポート番号も格納されています。

このメソッドは、データグラムが受信されるまでブロックしています。データグラムパケットオブジェクトの length フィールドは、受信されるメッセージの長さの情報を含んでいます。メッセージがパケットよりも長い場合、メッセージはパケットの長さに切りつめられます。

セキュリティマネージャが存在する場合、セキュリティマネージャの checkAccept メソッドがパケットの受信を許可しないときは、パケットの受信は行われません。

パラメータ:
p - 受信したデータを保存する DatagramPacket
例外:
IOException - 入出力エラーが発生した場合
関連項目:
DatagramPacket, DatagramSocket

getLocalAddress

public InetAddress getLocalAddress()
ソケットのバインド先のローカルアドレスを取得します。

セキュリティマネージャが存在する場合、まずセキュリティマネージャの checkConnect メソッドが、引数としてホストアドレスおよび -1 を指定して呼び出され、この操作が許可されているかどうかを確認します。

戻り値:
ソケットのバインド先のローカルアドレス表す InetAddress
例外:
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkConnect メソッドがこの操作を許可しない場合
導入されたバージョン:
1.1
関連項目:
SecurityManager.checkConnect(java.lang.String, int)

getLocalPort

public int getLocalPort()
このソケットのバインド先となる、ローカルホスト上のポート番号を返します。
戻り値:
このソケットのバインド先となる、ローカルホスト上のポート番号

setSoTimeout

public void setSoTimeout(int timeout)
                  throws SocketException
指定された待ち時間 (ミリ秒単位) を使用して、SO_TIMEOUT を有効または無効にします。このオプションにゼロ以外の待ち時間を設定した場合、この DatagramSocket に対して receive() を呼び出すと、設定した時間だけブロックされます。待ち時間が経過すると、ServerSocket は有効なままで java.io.InterruptedIOException が発生します。このオプションは、ブロック操作に入る前に有効にしておく必要があります。待ち時間には 0 より大きい値を指定します。待ち時間にゼロを指定すると、待ち時間は無限と解釈されます。
パラメータ:
timeout - ミリ秒で表される、指定された待ち時間
例外:
SocketException - 使用しているプロトコルで TCP エラーなどのエラーが発生した場合
導入されたバージョン:
JDK1.1
関連項目:
getSoTimeout()

getSoTimeout

public int getSoTimeout()
                 throws SocketException
SO_TIMEOUT の設定を取得します。このオプションが無効 (待ち時間が無限) の場合は、0 を返します。
戻り値:
SO_TIMEOUT の設定
例外:
SocketException - 使用しているプロトコルで TCP エラーなどのエラーが発生した場合
導入されたバージョン:
JDK1.1
関連項目:
setSoTimeout(int)

setSendBufferSize

public void setSendBufferSize(int size)
                       throws SocketException
SO_SNDBUF オプションを、この DatagramSocket に指定された値に設定します。SO_SNDBUF オプションは、使用するネットワーク入出力バッファに設定するサイズのヒントとして、プラットフォームのネットワークコードが使います。

バッファのサイズを増やすと、大規模な接続でのネットワーク入出力のパフォーマンスを上げることができます。一方、サイズを減らすと、受信データのバックログを減らすことができます。UDP の場合は、この値により、このソケットを通じて送信されるパケットの最大サイズが設定されます。

SO_SNDBUF はヒントなので、アプリケーションでバッファのサイズ設定を調べる必要がある場合は、getSendBufferSize() を呼び出してください。

パラメータ:
size - 送信バッファ用として設定するサイズ。0 より大きい値を指定する必要がある
例外:
SocketException - 使用しているプロトコルで TCP エラーなどのエラーが発生した場合
IllegalArgumentException - 値が 0 または負の値である場合
関連項目:
getSendBufferSize()

getSendBufferSize

public int getSendBufferSize()
                      throws SocketException
この DatagramSocket で使われる SO_SNDBUF オプションの値を取得します。これは、この DatagramSocket で出力用としてプラットフォームが使うバッファのサイズです。
戻り値:
この DatagramSocket の SO_SNDBUF オプションの値
例外:
SocketException - 使用しているプロトコルで TCP エラーなどのエラーが発生した場合
関連項目:
setSendBufferSize(int)

setReceiveBufferSize

public void setReceiveBufferSize(int size)
                          throws SocketException
SO_RCVBUF オプションを、この DatagramSocket に指定された値に設定します。SO_RCVBUF オプションは、使用するネットワーク入出力バッファに設定するサイズのヒントとして、プラットフォームのネットワークコードが使います。

バッファのサイズを増やすと、大規模な接続でのネットワーク入出力のパフォーマンスを上げることができます。一方、サイズを減らすと、受信データのバックログを減らすことができます。UDP の場合は、この値により、この DatagramSocket を通じて送信されるパケットの最大サイズが設定されます。

SO_RCVBUF はヒントなので、アプリケーションでバッファのサイズ設定を調べる必要がある場合は、getReceiveBufferSize() を呼び出してください。

パラメータ:
size - 受信バッファ用として設定するサイズ。0 より大きい値を指定する必要がある
例外:
SocketException - 使用しているプロトコルで TCP エラーなどのエラーが発生した場合
IllegalArgumentException - 値が 0 または負の値である場合
関連項目:
getReceiveBufferSize()

getReceiveBufferSize

public int getReceiveBufferSize()
                         throws SocketException
この DatagramSocket で使われる SO_RCVBUF オプションの値を取得します。これは、この DatagramSocket で入力用としてプラットフォームが使うバッファのサイズです。
戻り値:
この DatagramSocket の SO_RCVBUF オプションの値
例外:
SocketException - 使用しているプロトコルで TCP エラーなどのエラーが発生した場合
関連項目:
setReceiveBufferSize(int)

close

public void close()
このデータグラムソケットを閉じます。

setDatagramSocketImplFactory

public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac)
                                         throws IOException
アプリケーションのデータグラムソケット実装ファクトリを設定します。ファクトリを設定できるのは 1 回だけです。

アプリケーションで新しいデータグラムソケットを作成すると、ソケット実装ファクトリの createDatagramSocketImpl メソッドが呼び出され、実際のデータグラムソケット実装が作成されます。

セキュリティマネージャが存在する場合、このメソッドはまずセキュリティマネージャの checkSetFactory メソッドを呼び出すことにより、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。

パラメータ:
fac - 目的のファクトリ
例外:
IOException - データグラムソケットファクトリの設定中に入出力エラーが発生した場合
SocketException - ファクトリがすでに定義されている場合
SecurityException - セキュリティマネージャが存在し、セキュリティマネージャの checkSetFactory メソッドがこの操作を許可しない場合
関連項目:
DatagramSocketImplFactory.createDatagramSocketImpl(), SecurityManager.checkSetFactory()

JavaTM 2 Platform
Std. Ed. v1.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

Java、Java 2D、JDBC は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road,
Palo Alto, California, 94303, U.S.A. All Rights Reserved.