- すべての実装されたインタフェース:
Closeable
,AutoCloseable
- 直系の既知のサブクラス:
MulticastSocket
データグラム・ソケットは、パケット配信サービスの送信点または受信点です。 データグラム・ソケット上で送信または受信する各パケットは、それぞれ異なるアドレスで経路を指定されます。 あるマシンから別のマシンに複数のパケットを送信する場合、各パケットは異なる経路で送信される可能性があり、宛先には任意の順序で到達する可能性があります。
可能な場合、新しく構築された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
クラスは、マルチキャスト・グループ「結合」およびleaveへのメソッドを定義し、「マルチキャスト・オプション」をサポートします。これは、「結合」、leavingまたはマルチキャスト・グループへのデータグラムの送信時に役立ちます。 次のマルチキャスト・オプションがサポートされています:
実装は、追加のオプションをサポートする場合もあります。
オプション名 説明 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-sourceとsource-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 between 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マルチキャスト・データグラムを受信するアプリケーションの開発時には、次の項目を考慮するべきです。
-
DatagramChannel
と対照的に、DatagramSocket
のコンストラクタでは、基礎となるソケットのProtocolFamily
を指定することはできません。 そのため、基礎となるソケットのプロトコル・ファミリは、DatagramSocket
が参加しようとするマルチキャスト・グループのプロトコル・ファミリに対応していない可能性があります。
あるプロトコル・ファミリで作成された基礎となるソケットを持つDatagramSocket
が、マルチキャスト・グループのアドレスが別のプロトコル・ファミリに対応する場合に、マルチキャスト・データグラムを結合および受信できるという保証はありません。 たとえば、IPv6ソケットへのDatagramSocket
がIPv4マルチキャスト・グループに参加でき、グループに送信されるマルチキャスト・データグラムを受信できる場合は、実装に固有です。 - マルチキャスト・グループに参加する前に、
DatagramSocket
をワイルドカード・アドレスにバインドする必要があります。 ソケットが、ワイルドカード・アドレスではなく特定のアドレスにバインドされている場合、ソケットがマルチキャスト・データグラムを受信するかどうかは実装によって異なります。 - SO_REUSEADDRオプションは、ソケットをバインドする前に有効にしてください。 これは、グループの複数のメンバーを同じアドレスにバインドできるようにするために必要です。
-
- 導入されたバージョン:
- 1.0
- 関連項目:
-
コンストラクタのサマリー
修飾子コンストラクタ説明データグラム・ソケットを構築し、ローカル・ホスト・マシン上の使用可能なポートにバインドします。DatagramSocket
(int port) データグラム・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。DatagramSocket
(int port, InetAddress laddr) 指定されたローカル・アドレスにバインドされたデータグラム・ソケットを作成します。protected
指定されたDatagramSocketImplを使用してバインドされていないデータグラム・ソケットを作成します。DatagramSocket
(SocketAddress bindaddr) 指定されたローカル・ソケット・アドレスにバインドされたデータグラム・ソケットを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明void
bind
(SocketAddress addr) このDatagramSocketを特定のアドレスおよびポートにバインドします。void
close()
このデータグラム・ソケットを閉じます。void
connect
(InetAddress address, int port) ソケットをこのソケットのリモート・アドレスに接続します。void
connect
(SocketAddress addr) このソケットをリモート・ソケット・アドレス(IPアドレス+ポート番号)に接続します。void
ソケットを切断します。boolean
SO_BROADCASTが有効かどうかを調べます。このデータグラム・ソケットに付けられた一意のDatagramChannel
オブジェクトを返します(存在する場合)。このソケットの接続先のアドレスを返します。ソケットのバインド先のローカル・アドレスを取得します。int
このソケットのバインド先となる、ローカル・ホスト上のポート番号を返します。このソケットのバインド先の端点のアドレスを返します。<T> T
getOption
(SocketOption<T> name) ソケット・オプションの値を返します。int
getPort()
このソケットの接続先のポート番号を返します。int
このDatagramSocket
のSO_RCVBUFオプションの値を取得します。これは、このDatagramSocket
での入力にプラットフォームで使用されるサイズ(バイト単位)です。このソケットが接続されている端点のアドレスを返します。ソケットが接続されていない場合はnull
を返します。boolean
SO_REUSEADDRが有効かどうかを調べます。int
このDatagramSocket
のSO_SNDBUFオプションの値を取得します。これは、プラットフォームがこのDatagramSocket
の出力に使用するサイズ(バイト単位)です。int
SO_TIMEOUTの設定を取得します。このオプションが無効(タイム・アウトが無限)の場合は0を返します。int
このDatagramSocketから送信されるパケットのIPデータグラム・ヘッダーのトラフィック・クラスまたはサービス型を取得します。boolean
isBound()
ソケットのバインディング状態を返します。boolean
isClosed()
ソケットが閉じたかどうかを返します。boolean
ソケットの接続状態を返します。void
joinGroup
(SocketAddress mcastaddr, NetworkInterface netIf) あるマルチキャスト・グループに参加します。void
leaveGroup
(SocketAddress mcastaddr, NetworkInterface netIf) 指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。void
このソケットからのデータグラム・パケットを受信します。void
このソケットからデータグラム・パケットを送信します。void
setBroadcast
(boolean on) SO_BROADCASTを有効または無効にします。static void
非推奨。<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<?>>
このソケットでサポートされているソケット・オプションのセットを返します。
-
コンストラクタの詳細
-
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
メソッドが呼び出されます。 その他の場合、指定したaddress
とport
を使って、セキュリティ・マネージャのcheckConnect
メソッドとcheckAccept
メソッドが呼び出され、それぞれ、データグラムの送信と受信が許可されていることを確認します。接続されたデータグラム・ソケットが、信頼されていないコードと共有されないように注意する必要があります。 ソケットが接続されたとき、
receive
とsend
ではパケットの受信および送信に対するセキュリティ・チェックを行いません。ただし、パケットとソケットのアドレスおよびポートが一致するかどうかの確認は行います。 送信の処理では、パケットのアドレスが設定されている場合に、パケットのアドレスとソケットのアドレスが一致しないときは、IllegalArgumentException
がスローされます。 マルチキャスト・アドレスに接続されているソケットは、送信パケットだけに使用できます。 このメソッドを呼び出す前にreceivedではないソケット「ソケット受信バッファ」のデータグラムは破棄される可能性があります。- パラメータ:
address
- ソケットが使うリモート・アドレスport
- ソケットが使うリモート・ポート。- 例外:
IllegalArgumentException
- アドレスがnullの場合、またはポートが「範囲外です。」の場合SecurityException
- セキュリティ・マネージャがインストールされていて、指定されたリモート・アドレスへのアクセスが許可されていない場合UncheckedIOException
- 宛先アドレスがルーティング不可の場合など、接続に失敗した場合にスローされることがあります。- 導入されたバージョン:
- 1.2
- 関連項目:
-
connect
public void connect(SocketAddress addr) throws SocketException このソケットをリモート・ソケット・アドレス(IPアドレス+ポート番号)に接続します。InetSocketAddress
が指定されている場合、このメソッドは、指定されたソケット・アドレスのIPアドレスとポート番号を使用してconnect(InetAddress,int)
を呼び出すかのように動作します。ただし、発生する可能性のあるSocketException
はUncheckedIOException
にラップされません。 このメソッドを呼び出す前にreceivedではないソケット「ソケット受信バッファ」のデータグラムは破棄される可能性があります。- パラメータ:
addr
- リモート・アドレス。- 例外:
SocketException
- 接続に失敗した場合IllegalArgumentException
-addr
がnull
であるか、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
フィールドには、受信されるメッセージの長さの情報が格納されています。 メッセージがパケットよりも長い場合、メッセージは切り詰められます。このメソッドは、次の状況では「割り込み」です:
- データグラム・ソケットは、
DatagramChannel
を持つ「関連」です。 その場合、データグラム・パケットを受信するスレッドを中断すると、基礎となるチャネルが閉じられ、このメソッドは、中断ステータスが設定されたClosedByInterruptException
をスローします。 - データグラム・ソケットはシステムのデフォルト・ソケット実装を使用し、「仮想スレッド」PREVIEWはデータグラム・パケットを受信しています。 その場合、仮想スレッドを中断すると、仮想スレッドが復帰してソケットを閉じます。 このメソッドは、中断ステータスが設定された
SocketException
をスローします。
セキュリティ・マネージャがあり、ソケットが現在リモート・アドレスに接続されていない場合、セキュリティ・マネージャ
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 SocketExceptionSO_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 SocketExceptionSO_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 SocketExceptionSO_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)
優先フィールドにビットを設定すると、操作が許可されないことを示す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
- 関連項目:
-
DatagramChannel
を使用するか、またはサブクラスDatagramSocket
を直接使用します。