- 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が作成されます。- 導入されたバージョン:
- 1.0
- 関連項目:
DatagramPacket
,DatagramChannel
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 DatagramSocket()
データグラム・ソケットを構築し、ローカル・ホスト・マシン上の使用可能なポートにバインドします。DatagramSocket(int port)
データグラム・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。DatagramSocket(int port, InetAddress laddr)
指定されたローカル・アドレスにバインドされたデータグラム・ソケットを作成します。protected
DatagramSocket(DatagramSocketImpl impl)
指定されたDatagramSocketImplを使用してバインドされていないデータグラム・ソケットを作成します。DatagramSocket(SocketAddress bindaddr)
指定されたローカル・ソケット・アドレスにバインドされたデータグラム・ソケットを作成します。
-
メソッドのサマリー
すべてのメソッド staticメソッド インスタンス・メソッド 具象メソッド 修飾子と型 メソッド 説明 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()
このソケットでサポートされているソケット・オプションのセットを返します。
-
-
-
コンストラクタの詳細
-
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
メソッドが呼び出されます。 その他の場合、指定したaddress
とport
を使って、セキュリティ・マネージャのcheckConnect
メソッドとcheckAccept
メソッドが呼び出され、それぞれ、データグラムの送信と受信が許可されていることを確認します。ソケットが接続されたとき、
receive
とsend
ではパケットの受信および送信に対するセキュリティ・チェックを行いません。ただし、パケットとソケットのアドレスおよびポートが一致するかどうかの確認は行います。 送信の処理では、パケットのアドレスが設定されている場合に、パケットのアドレスとソケットのアドレスが一致しないときは、IllegalArgumentException
がスローされます。 マルチキャスト・アドレスに接続されているソケットは、送信パケットだけに使用できます。- パラメータ:
address
- ソケットが使うリモート・アドレスport
- ソケットが使うリモート・ポート。- 例外:
IllegalArgumentException
- アドレスがnullである場合、またはポートが範囲外の場合。SecurityException
- セキュリティ・マネージャがインストールされていて、指定されたリモート・アドレスへのアクセスが許可されていない場合- 関連項目:
disconnect()
-
connect
public void connect(SocketAddress addr) throws SocketException
このソケットをリモート・ソケット・アドレス(IPアドレス+ポート番号)に接続します。InetSocketAddress
が指定されている場合、このメソッドは、指定されたソケット・アドレスIPアドレスとポート番号でconnect(InetAddress,int)
を呼び出すかのように動作します。- パラメータ:
addr
- リモート・アドレス。- 例外:
SocketException
- 接続に失敗した場合IllegalArgumentException
-addr
がnull
であるか、addr
がこのソケットによってサポートされていないSocketAddressサブクラスである場合SecurityException
- セキュリティ・マネージャがインストールされていて、指定されたリモート・アドレスへのアクセスが許可されていない場合- 導入されたバージョン:
- 1.4
-
disconnect
public void disconnect()
ソケットを切断します。 ソケットが閉じられている場合や接続されていない場合、このメソッドは効果がありません。
-
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
- このソケットに関連するチャネルが存在し、そのチャネルが非ブロック・モードである場合。- 関連項目:
DatagramPacket
、DatagramSocket
-
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
より大きい値を指定します。 タイム・アウト0は無限のタイム・アウトとして解釈されます。- パラメータ:
timeout
- ミリ秒で表される、指定されたタイム・アウト。- 例外:
SocketException
- 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。- 導入されたバージョン:
- 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_RESUEADDR
ソケット・オプションの有効化または無効化時にエラーが発生した場合、またはソケットがクローズされている場合。- 導入されたバージョン:
- 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)
優先フィールドにビットを設定すると、操作が許可されないことを示す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
-
-