モジュール java.base
パッケージ java.net

クラスDatagramSocket

java.lang.Object
java.net.DatagramSocket
すべての実装されたインタフェース:
Closeable, AutoCloseable
直系の既知のサブクラス:
MulticastSocket

public class DatagramSocket extends Object implements Closeable
このクラスは、データグラム・パケットを送受信するためのソケットを表します。

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

可能な場合、新しく構築されたDatagramSocketは、ブロードキャスト・データグラムの転送を許可するためにSO_BROADCASTソケット・オプションを有効にします。 ブロードキャスト・パケットを受信するときは、DatagramSocketをワイルドカード・アドレスにバインドするようにしてください。 実装によっては、DatagramSocketが特定のアドレスにバインドされていてもブロードキャスト・パケットを受信する場合もあります。

例:


              DatagramSocket s = new DatagramSocket(null);
              s.bind(new InetSocketAddress(8888));
 
これは、次のことに相当します:

              DatagramSocket s = new DatagramSocket(8888);
 
どちらの場合も、UDPポート8888でブロードキャストを受信できるDatagramSocketは作成します。

DatagramSocketクラスは、複数のソケット・オプションを設定および取得するための便利なメソッドを定義します。 このクラスは、ソケット・オプションを設定および問合せするsetOptionメソッドとgetOptionメソッドも定義します。 DatagramSocketでは、次のソケット・オプションがサポートされます:

ソケット・オプション
オプション名 説明
SO_SNDBUF ソケット送信バッファのサイズ(バイト単位)
SO_RCVBUF ソケット受信バッファのサイズ(バイト単位)
SO_REUSEADDR アドレスを再利用します
SO_BROADCAST ブロードキャスト・データグラムの転送を許可します
IP_TOS IP (Internet Protocol)ヘッダーのサービス・タイプ(ToS)オクテット

また、DatagramSocketクラスは、マルチキャスト・グループjoinおよびleaveへのメソッドを定義し、「マルチキャスト・オプション」をサポートします。これは、joiningleavingまたはマルチキャスト・グループへのデータグラムの送信時に役立ちます。 次のマルチキャスト・オプションがサポートされています:

マルチキャスト・オプション
オプション名 説明
IP_MULTICAST_IF IP (Internet Protocol)マルチキャスト・データグラムのネットワーク・インタフェース
IP_MULTICAST_TTL IP (Internet Protocol)マルチキャスト・データグラムの有効期間
IP_MULTICAST_LOOP IP (Internet Protocol)マルチキャスト・データグラムのループ・バック
実装は、追加のオプションをサポートする場合もあります。

APIのノート:
DatagramSocketを使用したマルチキャスト

DatagramChannelは、MulticastChannelインタフェースを実装し、マルチキャスト・データグラムを送受信するための代替APIを提供します。 MulticastChannel APIは、any-sourcesource-specificの両方のマルチキャストをサポートしています。 マルチキャストにDatagramChannelを使用することを検討してください。

DatagramSocketは、マルチキャストに直接使用できます。 ただし、MulticastSocketと対照的に、DatagramSocketはデフォルトでSO_REUSEADDRソケット・オプションを有効にするためにsetReuseAddress(boolean)メソッドを呼び出しません。 後でマルチキャスト・グループに参加することを目的としたDatagramSocketを作成する場合、呼出し元はSO_REUSEADDRオプションを明示的に有効化することを検討する必要があります。

DatagramSocketのインスタンスは、マルチキャスト・データグラム・パケットの送受信に使用できます。 マルチキャスト・データグラムを送信するためにマルチキャスト・グループに参加する必要はありません。 ただし、マルチキャスト・データグラム・パケットを送信する前に、マルチキャスト・データグラムを送信するデフォルトの送信インタフェースを最初にsetOptionおよびStandardSocketOptions.IP_MULTICAST_IFを使用して構成する必要があります:


    DatagramSocket sender = new DatagramSocket(new InetSocketAddress(0));
    NetworkInterface outgoingIf = NetworkInterface.getByName("en0");
    sender.setOption(StandardSocketOptions.IP_MULTICAST_IF, outgoingIf);

    // optionally configure multicast TTL; the TTL defines the scope of a
    // multicast datagram, for example, confining it to host local (0) or
    // link local (1) etc...
    int ttl = ...; // a number betwen 0 and 255
    sender.setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl);

    // send a packet to a multicast group
    byte[] msgBytes = ...;
    InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
    int port = 6789;
    InetSocketAddress dest = new InetSocketAddress(mcastaddr, port);
    DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.length, dest);
    sender.send(hi);
 

DatagramSocketのインスタンスを使用して、マルチキャスト・データグラム・パケットを受信することもできます。 マルチキャスト・データグラムを受信する目的で作成されたDatagramSocketは、「バインドなし」を作成する必要があります。 ソケットをバインドする前に、setReuseAddress(true)を構成する必要があります:


    DatagramSocket socket = new DatagramSocket(null); // unbound
    socket.setReuseAddress(true); // set reuse address before binding
    socket.bind(new InetSocketAddress(6789)); // bind

    // joinGroup 228.5.6.7
    InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
    InetSocketAddress group = new InetSocketAddress(mcastaddr, 0);
    NetworkInterface netIf = NetworkInterface.getByName("en0");
    socket.joinGroup(group, netIf);
    byte[] msgBytes = new byte[1024]; // up to 1024 bytes
    DatagramPacket packet = new DatagramPacket(msgBytes, msgBytes.length);
    socket.receive(packet);
    ....
    // eventually leave group
    socket.leaveGroup(group, netIf);
 

プラットフォームの依存性

マルチキャスト実装は、ネイティブ・マルチキャスト機能に直接マッピングすることを目的としています。 そのため、IPマルチキャスト・データグラムを受信するアプリケーションの開発時には、次の項目を考慮するべきです。

  1. DatagramChannelと対照的に、DatagramSocketのコンストラクタでは、基礎となるソケットのProtocolFamilyを指定することはできません。 そのため、基礎となるソケットのプロトコル・ファミリは、DatagramSocketが参加しようとするマルチキャスト・グループのプロトコル・ファミリに対応していない可能性があります。
    あるプロトコル・ファミリで作成された基礎となるソケットを持つDatagramSocketが、マルチキャスト・グループのアドレスが別のプロトコル・ファミリに対応する場合に、マルチキャスト・データグラムを結合および受信できるという保証はありません。
    たとえば、IPv6ソケットへのDatagramSocketがIPv4マルチキャスト・グループに参加でき、グループに送信されるマルチキャスト・データグラムを受信できる場合は、実装に固有です。
  2. マルチキャスト・グループに参加する前に、DatagramSocketをワイルドカード・アドレスにバインドする必要があります。 ソケットが、ワイルドカード・アドレスではなく特定のアドレスにバインドされている場合、ソケットがマルチキャスト・データグラムを受信するかどうかは実装によって異なります。
  3. SO_REUSEADDRオプションは、ソケットをバインドする前に有効にしてください。 これは、グループの複数のメンバーを同じアドレスにバインドできるようにするために必要です。

導入されたバージョン:
1.0
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
     
    データグラム・ソケットを構築し、ローカル・ホスト・マシン上の使用可能なポートにバインドします。
     
    DatagramSocket(int port)
    データグラム・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。
     
    DatagramSocket(int port, InetAddress laddr)
    指定されたローカル・アドレスにバインドされたデータグラム・ソケットを作成します。
    protected
    指定されたDatagramSocketImplを使用してバインドされていないデータグラム・ソケットを作成します。
     
    指定されたローカル・ソケット・アドレスにバインドされたデータグラム・ソケットを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    このDatagramSocketを特定のアドレスおよびポートにバインドします。
    void
    このデータグラム・ソケットを閉じます。
    void
    connect(InetAddress address, int port)
    ソケットをこのソケットのリモート・アドレスに接続します。
    void
    このソケットをリモート・ソケット・アドレス(IPアドレス+ポート番号)に接続します。
    void
    ソケットを切断します。
    boolean
    SO_BROADCASTが有効かどうかを調べます。
    このデータグラム・ソケットに付けられた一意のDatagramChannelオブジェクトを返します(存在する場合)。
    このソケットの接続先のアドレスを返します。
    ソケットのバインド先のローカル・アドレスを取得します。
    int
    このソケットのバインド先となる、ローカル・ホスト上のポート番号を返します。
    このソケットのバインド先の端点のアドレスを返します。
    <T> T
    ソケット・オプションの値を返します。
    int
    このソケットの接続先のポート番号を返します。
    int
    このDatagramSocketのSO_RCVBUFオプションの値を取得します。これは、このDatagramSocketでの入力にプラットフォームで使用されるサイズ(バイト単位)です。
    このソケットが接続されている端点のアドレスを返します。ソケットが接続されていない場合はnullを返します。
    boolean
    SO_REUSEADDRが有効かどうかを調べます。
    int
    このDatagramSocketのSO_SNDBUFオプションの値を取得します。これは、プラットフォームがこのDatagramSocketの出力に使用するサイズ(バイト単位)です。
    int
    SO_TIMEOUTの設定を取得します。このオプションが無効(タイム・アウトが無限)の場合は0を返します。
    int
    このDatagramSocketから送信されるパケットのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型を取得します。
    boolean
    ソケットのバインディング状態を返します。
    boolean
    ソケットが閉じたかどうかを返します。
    boolean
    ソケットの接続状態を返します。
    void
    あるマルチキャスト・グループに参加します。
    void
    指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。
    void
    このソケットからのデータグラム・パケットを受信します。
    void
    このソケットからデータグラム・パケットを送信します。
    void
    setBroadcast(boolean on)
    SO_BROADCASTを有効または無効にします。
    static void
    非推奨。
    DatagramChannelを使用するか、またはサブクラスDatagramSocketを直接使用します。
    setOption(SocketOption<T> name, T value)
    ソケット・オプションの値を設定します。
    void
    SO_RCVBUFオプションを、このDatagramSocketに指定された値に設定します。
    void
    setReuseAddress(boolean on)
    SO_REUSEADDRソケット・オプションを有効または無効にします。
    void
    SO_SNDBUFオプションを、このDatagramSocketに指定された値に設定します。
    void
    setSoTimeout(int timeout)
    指定されたタイム・アウト(ミリ秒)を使ってSO_TIMEOUTを有効または無効にします。
    void
    このDatagramSocketから送信されるデータグラムのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型octetを設定します。
    このソケットでサポートされているソケット・オプションのセットを返します。

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • DatagramSocket

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

      セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にそのcheckListenメソッドが0を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。

      例外:
      SocketException - ソケットを開けなかった場合、またはソケットをバインドできなかった場合。
      SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
      関連項目:
    • DatagramSocket

      protected DatagramSocket(DatagramSocketImpl impl)
      指定されたDatagramSocketImplを使用してバインドされていないデータグラム・ソケットを作成します。
      パラメータ:
      impl - サブクラスがDatagramSocket上で使用するDatagramSocketImplのインスタンス。
      導入されたバージョン:
      1.4
    • DatagramSocket

      public DatagramSocket(SocketAddress bindaddr) throws SocketException
      指定されたローカル・ソケット・アドレスにバインドされたデータグラム・ソケットを作成します。

      アドレスがnullの場合、バインドされていないソケットが作成されます。

      セキュリティ・マネージャが存在する場合は、まずセキュリティ・マネージャのcheckListenメソッドがソケット・アドレスのポートを引数として呼び出され、操作が許可されるかどうかが確認されます。 この結果、SecurityExceptionがスローされることがあります。

      パラメータ:
      bindaddr - バインドするローカル・ソケット・アドレス。バインドされていないソケットの場合はnull
      例外:
      SocketException - ソケットを開くことができなかった場合、または指定されたローカル・ポートにソケットをバインドできなかった場合。
      SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
      IllegalArgumentException - bindaddrがこのソケットでサポートされていないSocketAddressサブクラスである場合。
      導入されたバージョン:
      1.4
      関連項目:
    • DatagramSocket

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

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

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

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

      ローカル・ポートは、0から65535の範囲で指定します。 ポート番号がzeroの場合は、bind操作で一時的なポートが選択されます。

      IPアドレスがwildcardアドレスまたはnullの場合、ソケットはワイルドカード・アドレスにバインドされます。

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

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

    • bind

      public void bind(SocketAddress addr) throws SocketException
      このDatagramSocketを特定のアドレスおよびポートにバインドします。

      アドレスがnullの場合は、システムにより一時的なポートと有効なローカル・アドレスが選択されてソケットがバインドされます。

      パラメータ:
      addr - バインド先のアドレスおよびポート。
      例外:
      SocketException - バインド時にエラーが発生した場合、またはソケットがすでにバインドされている場合。
      SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
      IllegalArgumentException - addrがこのソケットでサポートされていないSocketAddressサブクラスである場合。
      導入されたバージョン:
      1.4
    • connect

      public void connect(InetAddress address, int port)
      ソケットをこのソケットのリモート・アドレスに接続します。 ソケットがリモート・アドレスに接続されると、そのアドレスとの間でしかパケットを送受信できなくなります。 デフォルトでは、データグラム・ソケットは接続されません。 ソケットがすでに閉じている場合、このメソッドは効果がありません。

      このソケットがバインドされていない場合、このメソッドは最初に、nullのパラメータを使用してbindメソッドを呼び出す場合と同様に、自動的に割り当てられるアドレスにソケットをバインドします。 ソケットを接続するリモート接続先が存在しないか到達不可能の場合、およびそのアドレスに対するICMP転送先到達不能パケットを受信した場合は、以降の送信または受信呼出しでPortUnreachableExceptionがスローされることがあります。 例外が必ずスローされるとは限らないことに注意。

      セキュリティ・マネージャがインストールされている場合、リモート・アドレスへのアクセスをチェックするためにそれが呼び出されます。 具体的には、指定したaddressマルチキャスト・アドレスである場合、指定したaddressを使ってセキュリティ・マネージャのcheckMulticastメソッドが呼び出されます。 その他の場合、指定したaddressportを使って、セキュリティ・マネージャのcheckConnectメソッドとcheckAcceptメソッドが呼び出され、それぞれ、データグラムの送信と受信が許可されていることを確認します。

      接続されたデータグラム・ソケットが、信頼されていないコードと共有されないように注意する必要があります。 ソケットが接続されたとき、receivesendではパケットの受信および送信に対するセキュリティ・チェックを行いません。ただし、パケットとソケットのアドレスおよびポートが一致するかどうかの確認は行います。 送信の処理では、パケットのアドレスが設定されている場合に、パケットのアドレスとソケットのアドレスが一致しないときは、IllegalArgumentExceptionがスローされます。 マルチキャスト・アドレスに接続されているソケットは、送信パケットだけに使用できます。 このメソッドを呼び出す前にreceivedではないソケット「ソケット受信バッファ」のデータグラムは破棄される可能性があります。

      パラメータ:
      address - ソケットが使うリモート・アドレス
      port - ソケットが使うリモート・ポート。
      例外:
      IllegalArgumentException - アドレスがnullの場合、またはポートが「範囲外です。」の場合
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・アドレスへのアクセスが許可されていない場合
      UncheckedIOException - 宛先アドレスがルーティング不可の場合など、接続に失敗した場合にスローされることがあります。
      導入されたバージョン:
      1.2
      関連項目:
    • connect

      public void connect(SocketAddress addr) throws SocketException
      このソケットをリモート・ソケット・アドレス(IPアドレス+ポート番号)に接続します。

      InetSocketAddressが指定されている場合、このメソッドは、指定されたソケット・アドレスのIPアドレスとポート番号を使用してconnect(InetAddress,int)を呼び出すかのように動作します。ただし、発生する可能性のあるSocketExceptionUncheckedIOExceptionにラップされません。 このメソッドを呼び出す前にreceivedではないソケット「ソケット受信バッファ」のデータグラムは破棄される可能性があります。

      パラメータ:
      addr - リモート・アドレス。
      例外:
      SocketException - 接続に失敗した場合
      IllegalArgumentException - addrnullであるか、addrがこのソケットによってサポートされていないSocketAddressサブクラスである場合
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・アドレスへのアクセスが許可されていない場合
      導入されたバージョン:
      1.4
    • disconnect

      public void disconnect()
      ソケットを切断します。 ソケットが閉じられている場合や接続されていない場合、このメソッドは効果がありません。
      APIのノート:
      このメソッドがUncheckedIOExceptionをスローする場合、ソケットは未指定の状態のままになることがあります。 切断に失敗した場合はソケットを閉じることを強くお薦めします。
      例外:
      UncheckedIOException - disconnectが関連付けの解除に失敗し、ソケットが一貫性のある状態にリストアされた場合にスローされることがあります。
      導入されたバージョン:
      1.2
      関連項目:
    • isBound

      public boolean isBound()
      ソケットのバインディング状態を返します。

      ソケットがclosedとなる前にバインドされていた場合、このメソッドはソケットが閉じられた後も引き続きtrueを返します。

      戻り値:
      ソケットが正常にアドレスにバインドされている場合はtrue
      導入されたバージョン:
      1.4
    • isConnected

      public boolean isConnected()
      ソケットの接続状態を返します。

      ソケットがclosedとなる前に接続されていた場合、このメソッドはソケットが閉じられた後も引き続きtrueを返します。

      戻り値:
      ソケットがサーバーに正常に接続されている場合はtrue
      導入されたバージョン:
      1.4
    • getInetAddress

      public InetAddress getInetAddress()
      このソケットの接続先のアドレスを返します。 ソケットが接続されていない場合はnullを返します。

      ソケットが閉じられる前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先アドレスを返します。

      戻り値:
      ソケットが接続されているアドレス。
      導入されたバージョン:
      1.2
    • getPort

      public int getPort()
      このソケットの接続先のポート番号を返します。 ソケットが接続されていない場合は-1を返します。

      ソケットが閉じられる前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先ポート番号を返します。

      戻り値:
      このソケットが接続されているポート番号。
      導入されたバージョン:
      1.2
    • getRemoteSocketAddress

      public SocketAddress getRemoteSocketAddress()
      このソケットが接続されている端点のアドレスを返します。ソケットが接続されていない場合はnullを返します。

      ソケットが閉じられる前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先アドレスを返します。

      戻り値:
      このソケットのリモート端点を表すSocketAddress。ソケットがまだ接続されていない場合はnull
      導入されたバージョン:
      1.4
      関連項目:
    • getLocalSocketAddress

      public SocketAddress getLocalSocketAddress()
      このソケットのバインド先の端点のアドレスを返します。
      戻り値:
      このソケットのローカル端点を表すSocketAddress。ソケットが閉じられているか、まだバインドされていない場合はnull
      導入されたバージョン:
      1.4
      関連項目:
    • send

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

      セキュリティ・マネージャが存在し、ソケットが現在リモート・アドレスに接続されていない場合、このメソッドは最初にいくつかのセキュリティ・チェックを行います。 最初に、p.getAddress().isMulticastAddress()がtrueの場合、このメソッドは引数としてp.getAddress()を使い、セキュリティ・マネージャのcheckMulticastメソッドを呼び出します。 その式の評価がfalseの場合、このメソッドは代わりに、セキュリティ・マネージャのcheckConnectメソッドを、引数p.getAddress().getHostAddress()p.getPort()を指定して呼び出します。 それぞれのセキュリティ・マネージャ・メソッド呼出しの結果、操作が許可されない場合はSecurityExceptionがスローされます。

      パラメータ:
      p - 送信されるDatagramPacket
      例外:
      IOException - 入出力エラーが発生した場合。
      SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastまたはcheckConnectメソッドが送信を許可しない場合。
      PortUnreachableException - 現在到達不可能になっている宛先にソケットが接続されている場合にスローされる可能性があります。 例外が必ずスローされるとは限らないことに注意。
      IllegalBlockingModeException - このソケットに関連するチャネルが存在し、そのチャネルが非ブロック・モードである場合。
      IllegalArgumentException - ソケットが接続されていて、接続アドレスとパケット・アドレスが異なる場合、ソケットが接続されておらず、パケット・アドレスが設定されていない場合、またはそのポートが「範囲外です。」の場合
      関連項目:
    • receive

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

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

      セキュリティ・マネージャがあり、ソケットが現在リモート・アドレスに接続されていない場合、セキュリティ・マネージャcheckAcceptメソッドで許可されていないかぎりパケットを受信できません。 セキュリティ・マネージャによって許可されないデータグラムは無視されて破棄されます。

      パラメータ:
      p - 受信したデータを保存するDatagramPacket
      例外:
      IOException - 入出力エラーが発生した場合。
      SocketTimeoutException - setSoTimeoutが以前に呼び出されて、タイム・アウトが過ぎた場合。
      PortUnreachableException - 現在到達不可能になっている宛先にソケットが接続されている場合にスローされる可能性があります。 例外が必ずスローされるとは限らないことに注意。
      IllegalBlockingModeException - このソケットに関連するチャネルが存在し、そのチャネルが非ブロック・モードである場合。
      関連項目:
    • getLocalAddress

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

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

      戻り値:
      ソケットのバインド先のローカル・アドレス。ソケットが閉じられている場合はnull。または、ソケットがバインドされていないか、セキュリティ・マネージャのcheckConnectメソッドがこの操作を許可しない場合は、ワイルドカード・アドレスを表すInetAddress
      導入されたバージョン:
      1.1
      関連項目:
    • getLocalPort

      public int getLocalPort()
      このソケットのバインド先となる、ローカル・ホスト上のポート番号を返します。
      戻り値:
      このソケットのバインド先となる、ローカル・ホスト上のポート番号。ソケットが閉じられている場合は-1、まだバインドされていない場合は0
    • setSoTimeout

      public void setSoTimeout(int timeout) throws SocketException
      指定されたタイム・アウト(ミリ秒)を使ってSO_TIMEOUTを有効または無効にします。 このオプションを正のタイムアウト値に設定すると、このDatagramSocketに対するreceive()の呼出しは、この時間だけブロックされます。 タイム・アウトの期限が切れると、DatagramSocketがまだ有効であってもjava.net.SocketTimeoutExceptionが発行されます。 タイム・アウト0は無限のタイム・アウトとして解釈されます。 このオプションは、ブロック処理に入る前に有効にしておく必要があります
      パラメータ:
      timeout - ミリ秒で表される、指定されたタイム・アウト。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      IllegalArgumentException - timeoutが負の値の場合
      導入されたバージョン:
      1.1
      関連項目:
    • getSoTimeout

      public int getSoTimeout() throws SocketException
      SO_TIMEOUTの設定を取得します。このオプションが無効(タイム・アウトが無限)の場合は0を返します。
      戻り値:
      SO_TIMEOUTの設定
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      導入されたバージョン:
      1.1
      関連項目:
    • setSendBufferSize

      public void setSendBufferSize(int size) throws SocketException
      SO_SNDBUFオプションを、このDatagramSocketに指定された値に設定します。 SO_SNDBUFオプションは、使用するネットワーク入出力バッファのサイズを設定するヒントとして、ネットワーク実装が使います。 また、ネットワーク実装は、このソケットで送信できるパケットの最大サイズを判定するためにもSO_SNDBUF設定を使います。

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

      バッファ・サイズを大きくすると、送信速度が高い場合にネットワーク実装により複数の送信パケットをキューに入れることが可能になります。

      ノート: send(DatagramPacket)を使用してSO_SNDBUFの設定より大きいDatagramPacketを送信する場合、パケットが送信されるか破棄されるかは実装によって異なります。

      APIのノート:
      size > 0の場合、このメソッドはsetOption(StandardSocketOptions.SO_SNDBUF, size)の呼び出しと同等です。
      パラメータ:
      size - 送信サイズを設定するサイズ(バイト単位)。 この値は0より大きくなければならない。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      IllegalArgumentException - 値が0または負の値である場合。
      導入されたバージョン:
      1.2
      関連項目:
    • getSendBufferSize

      public int getSendBufferSize() throws SocketException
      このDatagramSocketのSO_SNDBUFオプションの値を取得します。これは、プラットフォームがこのDatagramSocketの出力に使用するサイズ(バイト単位)です。
      APIのノート:
      このメソッドは、getOption(StandardSocketOptions.SO_SNDBUF)のコールと同等です。
      戻り値:
      このDatagramSocketのSO_SNDBUFオプションの値
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      導入されたバージョン:
      1.2
      関連項目:
    • setReceiveBufferSize

      public void setReceiveBufferSize(int size) throws SocketException
      SO_RCVBUFオプションを、このDatagramSocketに指定された値に設定します。 「SO_RCVBUF」オプションは、基本的なネットワークI/Oバッファのサイズを決定するためのヒントとして、ネットワーク実装で使用されます。 また、ネットワーク実装は、このソケットで受信できるパケットの最大サイズを判定するためにもSO_RCVBUF設定を使います。

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

      SO_RCVBUFの値を大きくすると、receive(DatagramPacket)を使用した受信より速くパケットが到達する場合に、ネットワーク実装による複数のパケットのバッファリングが可能になる場合があります。

      ノート: SO_RCVBUFより大きいパケットを受信できるかどうかは実装によって異なります。

      APIのノート:
      size > 0の場合、このメソッドはsetOption(StandardSocketOptions.SO_RCVBUF, size)の呼び出しと同等です。
      パラメータ:
      size - 受信サイズを設定するサイズをバイト単位で指定します。 この値は0より大きくなければならない。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      IllegalArgumentException - 値が0または負の値である場合。
      導入されたバージョン:
      1.2
      関連項目:
    • getReceiveBufferSize

      public int getReceiveBufferSize() throws SocketException
      このDatagramSocketのSO_RCVBUFオプションの値を取得します。これは、このDatagramSocketでの入力にプラットフォームで使用されるサイズ(バイト単位)です。
      APIのノート:
      このメソッドは、getOption(StandardSocketOptions.SO_RCVBUF)のコールと同等です。
      戻り値:
      このDatagramSocketのSO_RCVBUFオプションの値
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      導入されたバージョン:
      1.2
      関連項目:
    • setReuseAddress

      public void setReuseAddress(boolean on) throws SocketException
      SO_REUSEADDRソケット・オプションを有効または無効にします。

      UDPソケットの場合、複数のソケットを同じソケット・アドレスにバインドすることが必要になることがあります。 マルチキャスト・パケットを受信するためには通常このようにします(MulticastSocketを参照)。 bind(SocketAddress)を使用してソケットをバインドする前にSO_REUSEADDRソケット・オプションが有効になっていれば、SO_REUSEADDRソケット・オプションを使って複数のソケットを同一のソケット・アドレスにバインドすることができます。

      ノート:この機能は、既存のすべてのプラットフォームでサポートされているわけではありません。したがって、このオプションが無視されるかどうかは実装によって異なります。 ただし、この機能がサポートされていない場合、getReuseAddress()は常にfalseを返します。

      DatagramSocketが作成されると、SO_REUSEADDRの初期設定は無効になります。

      ソケットがバインドされた(isBound()を参照)あとでSO_REUSEADDRを有効または無効にする場合の動作は定義されていません。

      APIのノート:
      このメソッドは、setOption(StandardSocketOptions.SO_REUSEADDR, on)のコールと同等です。
      パラメータ:
      on - 有効にするか無効にするかを指定
      例外:
      SocketException - SO_REUSEADDRソケット・オプションの有効化または無効化にエラーが発生した場合、またはソケットが閉じている場合。
      導入されたバージョン:
      1.4
      関連項目:
    • getReuseAddress

      public boolean getReuseAddress() throws SocketException
      SO_REUSEADDRが有効かどうかを調べます。
      APIのノート:
      このメソッドは、getOption(StandardSocketOptions.SO_REUSEADDR)のコールと同等です。
      戻り値:
      SO_REUSEADDRが有効かどうかを示すboolean値。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      導入されたバージョン:
      1.4
      関連項目:
    • setBroadcast

      public void setBroadcast(boolean on) throws SocketException
      SO_BROADCASTを有効または無効にします。

      一部のオペレーティング・システムでは、このオプションを有効するため、つまりブロードキャスト・データグラムを送信するために、実装固有の特権でJava仮想マシンを起動する必要があります。

      APIのノート:
      このメソッドは、setOption(StandardSocketOptions.SO_BROADCAST, on)のコールと同等です。
      パラメータ:
      on - ブロードキャストをオンにするかどうかを指定。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      導入されたバージョン:
      1.4
      関連項目:
    • getBroadcast

      public boolean getBroadcast() throws SocketException
      SO_BROADCASTが有効かどうかを調べます。
      APIのノート:
      このメソッドは、getOption(StandardSocketOptions.SO_BROADCAST)のコールと同等です。
      戻り値:
      SO_BROADCASTが有効かどうかを示すboolean値。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      導入されたバージョン:
      1.4
      関連項目:
    • setTrafficClass

      public void setTrafficClass(int tc) throws SocketException
      このDatagramSocketから送信されるデータグラムのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型octetを設定します。 使用するネットワーク実装がこの値を無視することがあるので、アプリケーションではこの値をヒントと考えてください。

      tcの範囲は0 <= tc <= 255でなければいけません。そうでない場合は、IllegalArgumentExceptionがスローされます。

      ノート:

      IP (Internet Protocol)バージョン4の場合、この値はintegerで構成され、最下位8ビットが、ソケットによって送信されたIPパケットのTOSオクテットの値を表します。 RFC 1349ではTOSの値は次のように定義されています。

      • IPTOS_LOWCOST (0x02)
      • IPTOS_RELIABILITY (0x04)
      • IPTOS_THROUGHPUT (0x08)
      • IPTOS_LOWDELAY (0x10)
      最下位ビットは、MBZ (0でなければならない)ビットに対応するので、常に無視されます。

      優先フィールドにビットを設定すると、操作が許可されないことを示すSocketExceptionになることがあります。

      IP (Internet Protocol)バージョン6の場合、tcはIPヘッダーのsin6_flowinfoフィールドに格納される値です。

      APIのノート:
      このメソッドは、setOption(StandardSocketOptions.IP_TOS, tc)のコールと同等です。
      パラメータ:
      tc - ビット・セットのint値。
      例外:
      SocketException - トラフィック・クラスまたはサービス・タイプの設定時にエラーが発生した場合
      導入されたバージョン:
      1.4
      関連項目:
    • getTrafficClass

      public int getTrafficClass() throws SocketException
      このDatagramSocketから送信されるパケットのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型を取得します。

      使用するネットワーク実装が、setTrafficClass(int)を使用して設定されたトラフィック・クラスまたはサービス型を無視することがあるので、このDatagramSocketでsetTrafficClass(int)メソッドを使用して以前に設定された値とは異なる値がこのメソッドから返されることがあります。

      APIのノート:
      このメソッドは、getOption(StandardSocketOptions.IP_TOS)のコールと同等です。
      戻り値:
      すでに設定されているトラフィック・クラスまたはサービス型
      例外:
      SocketException - トラフィック・クラスまたはサービス・タイプの値を取得する際にエラーが発生した場合。
      導入されたバージョン:
      1.4
      関連項目:
    • close

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

      このソケットのreceive(java.net.DatagramPacket)で現在ブロックされているすべてのスレッドがSocketExceptionをスローします。

      このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。

      定義:
      close、インタフェースAutoCloseable
      定義:
      close、インタフェースCloseable
    • isClosed

      public boolean isClosed()
      ソケットが閉じたかどうかを返します。
      戻り値:
      ソケットが閉じた場合はtrue
      導入されたバージョン:
      1.4
    • getChannel

      public DatagramChannel getChannel()
      このデータグラム・ソケットに付けられた一意のDatagramChannelオブジェクトを返します(存在する場合)。

      チャネル自体がDatagramChannel.openメソッドを使用して作成された場合にだけ、データグラム・ソケットにチャネルが存在します。

      戻り値:
      このデータグラム・ソケットに関連するデータグラム・チャネル。このソケットがチャネル用に作成されなかった場合はnull
      導入されたバージョン:
      1.4
    • setDatagramSocketImplFactory

      @Deprecated(since="17") public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
      非推奨。
      DatagramChannelを使用するか、またはサブクラスDatagramSocketを直接使用します。
      このメソッドは、システム全体のDatagramSocket実装を置き換えるためのJDKの初期リリースの方法を提供します。
      Java 1.4以降、ほとんど廃止されています。 必要に応じて、DatagramSocketを拡張し、implementationをパラメータとして取るprotected constructorを使用して、カスタム実装を使用するようにDatagramSocketを作成できます。
      アプリケーションのデータグラム・ソケット実装ファクトリを設定します。 ファクトリを指定できるのは一度だけです。

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

      このメソッドにnullを渡しても、ファクトリがすでに設定されていないかぎり、それは無操作になります。

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

      パラメータ:
      fac - 目的のファクトリ。
      例外:
      IOException−データグラム・ソケット・ファクトリの設定中に入出力エラーが発生した場合。
      SocketException - ファクトリがすでに定義されている場合。
      SecurityException - セキュリティ・マネージャが存在し、そのcheckSetFactoryメソッドでこの操作が許可されていない場合。
      導入されたバージョン:
      1.3
      関連項目:
    • setOption

      public <T> DatagramSocket setOption(SocketOption<T> name, T value) throws IOException
      ソケット・オプションの値を設定します。
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      value - ソケット・オプションの値。 nullの値は、一部のオプションで有効です。
      戻り値:
      このDatagramSocket
      例外:
      UnsupportedOperationException - データグラム・ソケットがオプションをサポートしていない場合。
      IllegalArgumentException - 値がオプションに対して有効でない場合。
      IOException - I/Oエラーが発生した場合、またはソケットが閉じられている場合。
      SecurityException - セキュリティ・マネージャが設定されていて、ソケット・オプションにセキュリティ許可が必要で、呼び出し元に必要な許可がない場合。 StandardSocketOptionsはセキュリティ権限を必要としません。
      NullPointerException - nameがnullの場合
      導入されたバージョン:
      9
    • getOption

      public <T> T getOption(SocketOption<T> name) throws IOException
      ソケット・オプションの値を返します。
      型パラメータ:
      T - ソケット・オプション値のタイプ
      パラメータ:
      name - ソケット・オプション
      戻り値:
      ソケット・オプションの値。
      例外:
      UnsupportedOperationException - データグラム・ソケットがオプションをサポートしていない場合。
      IOException - I/Oエラーが発生した場合、またはソケットが閉じられている場合。
      NullPointerException - nameがnullの場合
      SecurityException - セキュリティ・マネージャが設定されていて、ソケット・オプションにセキュリティ許可が必要で、呼び出し元に必要な許可がない場合。 StandardSocketOptionsはセキュリティ権限を必要としません。
      導入されたバージョン:
      9
    • supportedOptions

      public Set<SocketOption<?>> supportedOptions()
      このソケットでサポートされているソケット・オプションのセットを返します。 このメソッドは、ソケットが閉じられた後も引き続き一連のオプションを返します。
      戻り値:
      このソケットでサポートされているソケット・オプションのセット。 ソケットDatagramSocketImplを作成できない場合、このセットは空の場合があります。
      導入されたバージョン:
      9
    • joinGroup

      public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
      あるマルチキャスト・グループに参加します。

      マルチキャスト・グループに参加するには、コール元が参加するマルチキャスト・グループのIPアドレスを指定し、マルチキャスト・パケットを受信するローカル「ネットワーク・インタフェース」を指定する必要があります。

      • mcastaddr引数は、結合するマルチキャスト・グループのIPアドレスを示します。 履歴上の理由から、これはSocketAddressとして指定されます。 デフォルトの実装はInetSocketAddressのみをサポートし、port情報は無視されます。
      • netIf引数は、マルチキャスト・データグラム・パケットを受信するローカル・インタフェース、または送信マルチキャスト・データグラムのインタフェース・セットに遅延するnullを指定します。 nullで、インタフェースが設定されていない場合、動作は指定されません: インタフェースが選択されているか、操作がSocketExceptionで失敗する可能性があります。

      このメソッドを複数回呼び出して、複数の異なるマルチキャスト・グループを結合するか、複数の異なるネットワークで同じグループに参加することができます。 ただし、ソケットがすでにグループのメンバーである場合は、IOExceptionがスローされます。

      セキュリティ・マネージャが存在する場合、このメソッドは最初に、mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。

      APIのノート:
      送信マルチキャスト・データグラムを送信するデフォルト・インタフェースは、setOption(SocketOption, Object)StandardSocketOptions.IP_MULTICAST_IFとともに構成できます。
      パラメータ:
      mcastaddr - 、参加するマルチキャスト・アドレスを示します。
      netIf - マルチキャスト・データグラム・パケットを受信するローカル・インタフェース、またはnullを指定します。
      例外:
      IOException - 接続にエラーがある場合、またはアドレスがマルチキャスト・アドレスでない場合、またはプラットフォームがマルチキャストをサポートしていない場合
      SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドが参加を許可しない場合。
      IllegalArgumentException - mcastaddrがnullであるか、このソケットでサポートされないSocketAddressサブクラスである場合
      導入されたバージョン:
      17
      関連項目:
    • leaveGroup

      public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
      指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。

      セキュリティ・マネージャが存在する場合、このメソッドは最初に、mcastaddrを引数に指定してcheckMulticastメソッドを呼び出します。

      APIのノート:
      mcastaddrおよびnetIf引数は、このDatagramSocketによって以前に「結合」であったマルチキャスト・グループを識別する必要があります。

      このメソッドを複数回呼び出して複数の異なるマルチキャスト・グループが以前に結合されたままになるか、同じグループを複数の異なるネットワークで以前に結合されたままにしておくことができます。 ただし、ソケットが指定されたネットワーク内の指定されたグループのメンバーでない場合、IOExceptionがスローされます。

      パラメータ:
      mcastaddr - 離れるマルチキャスト・アドレス これには、グループの「結合」に使用されるものと同じIPアドレスが含まれている必要があります。
      netIf - 送信マルチキャスト・データグラムのインタフェース・セットに遅延するローカル・インタフェースまたはnullを指定します。 nullで、インタフェースが設定されていない場合、動作は指定されません: インタフェースが選択されているか、操作がSocketExceptionで失敗する可能性があります。
      例外:
      IOException - 離れる際にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合。
      SecurityException - セキュリティ・マネージャが存在し、そのcheckMulticastメソッドでこの操作が許可されていない場合。
      IllegalArgumentException - mcastaddrがnullの場合、またはこのソケットでサポートされないSocketAddressサブクラスである場合。
      導入されたバージョン:
      17
      関連項目: