モジュール 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を使用してデータグラムをマルチキャスト・グループに送信する場合に役立ちます。

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

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

    修飾子と型 メソッド 説明
    void bind​(SocketAddress addr)
    このDatagramSocketを特定のアドレスおよびポートにバインドします。
    void close()
    このデータグラム・ソケットを閉じます。
    void connect​(InetAddress address, int port)
    ソケットをこのソケットのリモート・アドレスに接続します。
    void connect​(SocketAddress addr)
    このソケットをリモート・ソケット・アドレス(IPアドレス+ポート番号)に接続します。
    void disconnect()
    ソケットを切断します。
    boolean getBroadcast()
    SO_BROADCASTが有効かどうかを調べます。
    DatagramChannel getChannel()
    このデータグラム・ソケットに付けられた一意のDatagramChannelオブジェクトを返します(存在する場合)。
    InetAddress getInetAddress()
    このソケットの接続先のアドレスを返します。
    InetAddress getLocalAddress()
    ソケットのバインド先のローカル・アドレスを取得します。
    int getLocalPort()
    このソケットのバインド先となる、ローカル・ホスト上のポート番号を返します。
    SocketAddress getLocalSocketAddress()
    このソケットのバインド先の端点のアドレスを返します。
    <T> T getOption​(SocketOption<T> name)
    ソケット・オプションの値を返します。
    int getPort()
    このソケットの接続先のポート番号を返します。
    int getReceiveBufferSize()
    このDatagramSocketで使われるSO_RCVBUFオプションの値を取得します。これは、このDatagramSocketで入力用としてプラットフォームが使うバッファのサイズです。
    SocketAddress getRemoteSocketAddress()
    このソケットが接続されている端点のアドレスを返します。ソケットが接続されていない場合はnullを返します。
    boolean getReuseAddress()
    SO_REUSEADDRが有効かどうかを調べます。
    int getSendBufferSize()
    このDatagramSocketで使われるSO_SNDBUFオプションの値を取得します。これは、このDatagramSocketで出力用としてプラットフォームが使うバッファのサイズです。
    int getSoTimeout()
    SO_TIMEOUTの設定を取得します。このオプションが無効(タイム・アウトが無限)の場合は0を返します。
    int getTrafficClass()
    このDatagramSocketから送信されるパケットのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型を取得します。
    boolean isBound()
    ソケットのバインディング状態を返します。
    boolean isClosed()
    ソケットが閉じたかどうかを返します。
    boolean isConnected()
    ソケットの接続状態を返します。
    void receive​(DatagramPacket p)
    このソケットからのデータグラム・パケットを受信します。
    void send​(DatagramPacket p)
    このソケットからデータグラム・パケットを送信します。
    void setBroadcast​(boolean on)
    SO_BROADCASTを有効または無効にします。
    static void setDatagramSocketImplFactory​(DatagramSocketImplFactory fac)
    アプリケーションのデータグラム・ソケット実装ファクトリを設定します。
    <T> DatagramSocket setOption​(SocketOption<T> name, T value)
    ソケット・オプションの値を設定します。
    void setReceiveBufferSize​(int size)
    SO_RCVBUFオプションを、このDatagramSocketに指定された値に設定します。
    void setReuseAddress​(boolean on)
    SO_REUSEADDRソケット・オプションを有効または無効にします。
    void setSendBufferSize​(int size)
    SO_SNDBUFオプションを、このDatagramSocketに指定された値に設定します。
    void setSoTimeout​(int timeout)
    指定されたタイム・アウト(ミリ秒)を使ってSO_TIMEOUTを有効または無効にします。
    void setTrafficClass​(int tc)
    このDatagramSocketから送信されるデータグラムのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型octetを設定します。
    Set<SocketOption<?>> supportedOptions()
    このソケットでサポートされているソケット・オプションのセットを返します。

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

    cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait
  • コンストラクタの詳細

    • DatagramSocket

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

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

      例外:
      SocketException - ソケットを開くことができなかった場合、または指定されたローカル・ポートにソケットをバインドできなかった場合。
      SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
      関連項目:
      SecurityManager.checkListen(int)
    • 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メソッドでこの操作が許可されていない場合。
      導入されたバージョン:
      1.4
      関連項目:
      SecurityManager.checkListen(int)
    • DatagramSocket

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

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

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

      public DatagramSocket​(int port, InetAddress laddr) throws SocketException
      指定されたローカル・アドレスにバインドされたデータグラム・ソケットを作成します。 ローカル・ポートは、0から65535の範囲で指定します。 IPアドレスが0.0.0.0の場合、ソケットはワイルドカード・アドレス(カーネルによって選択された任意のIPアドレス)にバインドされます。

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

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

    • 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)
      ソケットをこのソケットのリモート・アドレスに接続します。 ソケットがリモート・アドレスに接続されると、そのアドレスとの間でしかパケットを送受信できなくなります。 デフォルトでは、データグラム・ソケットは接続されません。

      ソケットを接続するリモート接続先が存在しないか到達不可能の場合、およびそのアドレスに対するICMP転送先到達不能パケットを受信した場合は、以降の送信または受信呼出しでPortUnreachableExceptionがスローされることがあります。 例外が必ずスローされるとは限らないことに注意。

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

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

      パラメータ:
      address - ソケットが使うリモート・アドレス
      port - ソケットが使うリモート・ポート。
      例外:
      IllegalArgumentException - アドレスがnullである場合、またはポートが範囲外の場合。
      SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・アドレスへのアクセスが許可されていない場合
      関連項目:
      disconnect()
    • connect

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

      InetSocketAddressが指定されている場合、このメソッドは、指定されたソケット・アドレスIPアドレスとポート番号でconnect(InetAddress,int)を呼び出すかのように動作します。

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

      public void disconnect()
      ソケットを切断します。 ソケットが閉じられている場合や接続されていない場合、このメソッドは効果がありません。
      関連項目:
      connect(java.net.InetAddress, int)
    • isBound

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

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

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

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

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

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

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

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

      戻り値:
      ソケットが接続されているアドレス。
    • getPort

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

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

      戻り値:
      このソケットが接続されているポート番号。
    • getRemoteSocketAddress

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

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

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

      public SocketAddress getLocalSocketAddress()
      このソケットのバインド先の端点のアドレスを返します。
      戻り値:
      このソケットのローカル端点を表すSocketAddress。ソケットが閉じられているか、まだバインドされていない場合はnull
      導入されたバージョン:
      1.4
      関連項目:
      getLocalAddress(), getLocalPort(), bind(SocketAddress)
    • 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 - ソケットが接続されていて、接続されたアドレスとパケット・アドレスが異なる場合、またはソケットが接続されておらず、パケット・アドレスが設定されていない場合。
      関連項目:
      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 - 入出力エラーが発生した場合。
      SocketTimeoutException - setSoTimeoutが以前に呼び出されて、タイム・アウトが過ぎた場合。
      PortUnreachableException - 現在到達不可能になっている宛先にソケットが接続されている場合にスローされる可能性があります。 例外が必ずスローされるとは限らないことに注意。
      IllegalBlockingModeException - このソケットに関連するチャネルが存在し、そのチャネルが非ブロック・モードである場合。
      関連項目:
      DatagramPacketDatagramSocket
    • getLocalAddress

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

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

      戻り値:
      ソケットのバインド先のローカル・アドレス。ソケットが閉じられている場合はnull。または、ソケットがバインドされていないか、セキュリティ・マネージャのcheckConnectメソッドがこの操作を許可しない場合は、ワイルドカード・アドレスを表すInetAddress
      導入されたバージョン:
      1.1
      関連項目:
      SecurityManager.checkConnect(java.lang.String, int)
    • 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()
    • getSoTimeout

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

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

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

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

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

      パラメータ:
      size - 送信バッファ・サイズの設定サイズ。 この値は0より大きくなければならない。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      IllegalArgumentException - 値が0または負の値である場合。
      関連項目:
      getSendBufferSize()
    • getSendBufferSize

      public int getSendBufferSize() throws SocketException
      このDatagramSocketで使われるSO_SNDBUFオプションの値を取得します。これは、このDatagramSocketで出力用としてプラットフォームが使うバッファのサイズです。
      戻り値:
      このDatagramSocketのSO_SNDBUFオプションの値
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      関連項目:
      setSendBufferSize(int)
    • 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より大きいパケットを受信できるかどうかは実装によって異なります。

      パラメータ:
      size - 受信バッファ・サイズの設定サイズ。 この値は0より大きくなければならない。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      IllegalArgumentException - 値が0または負の値である場合。
      関連項目:
      getReceiveBufferSize()
    • getReceiveBufferSize

      public int getReceiveBufferSize() throws SocketException
      このDatagramSocketで使われるSO_RCVBUFオプションの値を取得します。これは、このDatagramSocketで入力用としてプラットフォームが使うバッファのサイズです。
      戻り値:
      このDatagramSocketのSO_RCVBUFオプションの値
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      関連項目:
      setReceiveBufferSize(int)
    • 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を有効または無効にする場合の動作は定義されていません。

      パラメータ:
      on - 有効にするか無効にするかを指定
      例外:
      SocketException - SO_REUSEADDRソケット・オプションの有効化または無効化時にエラーが発生した場合、またはソケットがクローズされている場合。
      導入されたバージョン:
      1.4
      関連項目:
      getReuseAddress(), bind(SocketAddress), isBound(), isClosed()
    • getReuseAddress

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

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

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

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

      public boolean getBroadcast() throws SocketException
      SO_BROADCASTが有効かどうかを調べます。
      戻り値:
      SO_BROADCASTが有効かどうかを示すboolean値。
      例外:
      SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。
      導入されたバージョン:
      1.4
      関連項目:
      setBroadcast(boolean)
    • 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フィールドに格納される値です。

      パラメータ:
      tc - ビット・セットのint値。
      例外:
      SocketException - トラフィック・クラスまたはサービス・タイプの設定時にエラーが発生した場合
      導入されたバージョン:
      1.4
      関連項目:
      getTrafficClass()
    • getTrafficClass

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

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

      戻り値:
      すでに設定されているトラフィック・クラスまたはサービス型
      例外:
      SocketException - トラフィック・クラスまたはサービス・タイプの値を取得する際にエラーが発生した場合。
      導入されたバージョン:
      1.4
      関連項目:
      setTrafficClass(int)
    • 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

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

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

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

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

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