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を作成します。
DatagramPacket, DatagramChannel| 修飾子 | コンストラクタ | 説明 |
|---|---|---|
|
DatagramSocket() |
データグラム・ソケットを構築し、ローカル・ホスト・マシン上の使用可能なポートにバインドします。
|
protected |
DatagramSocket(DatagramSocketImpl impl) |
指定されたDatagramSocketImplを使用してバインドされていないデータグラム・ソケットを作成します。
|
|
DatagramSocket(int port) |
データグラム・ソケットを構築し、ローカル・ホスト・マシン上の指定されたポートにバインドします。
|
|
DatagramSocket(int port, InetAddress laddr) |
指定されたローカル・アドレスにバインドされたデータグラム・ソケットを作成します。
|
|
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() |
このソケットのバインド先の端点のアドレスを返します。
|
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の設定を取得します。
|
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) |
アプリケーションのデータグラム・ソケット実装ファクトリを設定します。
|
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を設定します。
|
public DatagramSocket()
throws SocketException
wildcardアドレス(カーネルによって選択されたIPアドレス)にバインドされます。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にそのcheckListenメソッドが0を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。
SocketException - ソケットを開くことができなかった場合、または指定されたローカル・ポートにソケットをバインドできなかった場合。SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。SecurityManager.checkListen(int)protected DatagramSocket(DatagramSocketImpl impl)
impl - サブクラスがDatagramSocket上で使用するDatagramSocketImplのインスタンス。public DatagramSocket(SocketAddress bindaddr) throws SocketException
アドレスがnullの場合は、バインドされていないソケットを作成します。
セキュリティ・マネージャが存在する場合は、まずセキュリティ・マネージャのcheckListenメソッドがソケット・アドレスのポートを引数として呼び出され、操作が許可されるかどうかが確認されます。 この結果、SecurityExceptionがスローされることがあります。
bindaddr - バインドするローカル・ソケット・アドレス。バインドされていないソケットの場合はnull。SocketException - ソケットを開くことができなかった場合、または指定されたローカル・ポートにソケットをバインドできなかった場合。SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。SecurityManager.checkListen(int)public DatagramSocket(int port)
throws SocketException
wildcardアドレス(カーネルによって選択されたIPアドレス)にバインドされます。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にそのcheckListenメソッドがport引数をその引数として指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。
port - 使用するポート。SocketException - ソケットを開くことができなかった場合、または指定されたローカル・ポートにソケットをバインドできなかった場合。SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。SecurityManager.checkListen(int)public DatagramSocket(int port,
InetAddress laddr)
throws SocketException
ワイルドカード・アドレス(カーネルによって選択された任意のIPアドレス)にバインドされます。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にそのcheckListenメソッドがport引数をその引数として指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。
port - 使用するローカル・ポートladdr - バインド先のローカル・アドレスSocketException - ソケットを開くことができなかった場合、または指定されたローカル・ポートにソケットをバインドできなかった場合。SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。SecurityManager.checkListen(int)public void bind(SocketAddress addr) throws SocketException
アドレスがnullの場合は、システムにより一時的なポートと有効なローカル・アドレスが選択されてソケットがバインドされます。
addr - バインド先のアドレスおよびポート。SocketException - バインド時にエラーが発生した場合、またはソケットがすでにバインドされている場合。SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。IllegalArgumentException - addrがこのソケットでサポートされていないSocketAddressサブクラスである場合。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()public void connect(SocketAddress addr) throws SocketException
InetSocketAddressが指定された場合、このメソッドは、指定したソケット・アドレスのIPアドレスとポート番号を使用してconnect(InetAddress,int)を呼び出すかのように動作します。
addr - リモート・アドレス。SocketException - 接続に失敗した場合IllegalArgumentException - addrがnullであるか、addrがこのソケットによってサポートされていないSocketAddressサブクラスである場合SecurityException - セキュリティ・マネージャがインストールされていて、指定されたリモート・アドレスへのアクセスが許可されていない場合public void disconnect()
public boolean isBound()
ソケットがclosedとなる前にバインドされていた場合、このメソッドはソケットが閉じられた後も引き続きtrueを返します。
public boolean isConnected()
ソケットがclosedとなる前に接続されていた場合、このメソッドはソケットが閉じられた後も引き続きtrueを返します。
public InetAddress getInetAddress()
nullを返します。
ソケットがclosed前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先アドレスを返します。
public int getPort()
-1を返します。
ソケットがclosed前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先ポート番号を返します。
public SocketAddress getRemoteSocketAddress()
nullを返します。
ソケットがclosed前に接続されていた場合は、このメソッドはソケットが閉じられたあとも引き続き接続先アドレスを返します。
SocketAddress。ソケットがまだ接続されていない場合はnull。getInetAddress(), getPort(), connect(SocketAddress)public SocketAddress getLocalSocketAddress()
SocketAddress。ソケットが閉じられているか、まだバインドされていない場合はnull。getLocalAddress(), getLocalPort(), bind(SocketAddress)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)public void receive(DatagramPacket p) throws IOException
DatagramPacketのバッファには受信したデータが格納されます。 データグラム・パケットには、送信者のIPアドレスと、送信者のマシンのポート番号も格納されています。
このメソッドはデータグラムが受信されるまでブロックされます。 データグラム・パケット・オブジェクトのlengthフィールドには、受信されるメッセージの長さの情報が格納されています。 メッセージがパケットよりも長い場合、メッセージは切り詰められます。
セキュリティ・マネージャが存在する場合、セキュリティ・マネージャのcheckAcceptメソッドがパケットの受信を許可しないときは、パケットの受信は行われません。
p - 受信したデータを保存するDatagramPacket。IOException - 入出力エラーが発生した場合。SocketTimeoutException - setSoTimeoutが以前に呼び出されて、タイム・アウトが過ぎた場合。PortUnreachableException - 現在到達不可能になっている宛先にソケットが接続されている場合にスローされる可能性があります。 例外が必ずスローされるとは限らないことに注意。 IllegalBlockingModeException - このソケットに関連するチャネルが存在し、そのチャネルが非ブロック・モードである場合。DatagramPacket、DatagramSocketpublic InetAddress getLocalAddress()
セキュリティ・マネージャが存在する場合は、まずセキュリティ・マネージャのcheckConnectメソッドがホスト・アドレスおよび-1を引数として呼び出され、操作が許可されるかどうかが確認されます。
null。または、ソケットがバインドされていないか、セキュリティ・マネージャのcheckConnectメソッドがこの操作を許可しない場合は、ワイルドカード・アドレスを表すInetAddressSecurityManager.checkConnect(java.lang.String, int)public int getLocalPort()
-1、まだバインドされていない場合は0。public void setSoTimeout(int timeout)
throws SocketException
0より大きい値を指定します。 タイム・アウト0は無限のタイム・アウトとして解釈されます。 timeout - ミリ秒で表される、指定されたタイム・アウト。SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。getSoTimeout()public int getSoTimeout()
throws SocketException
SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。setSoTimeout(int)public void setSendBufferSize(int size)
throws SocketException
DatagramSocketに指定された値に設定します。 SO_SNDBUFオプションは、使用するネットワーク入出力バッファのサイズを設定するヒントとして、ネットワーク実装が使います。 また、ネットワーク実装は、このソケットで送信できるパケットの最大サイズを判定するためにもSO_SNDBUF設定を使います。
SO_SNDBUFはヒントなので、アプリケーションでバッファのサイズを調べる必要がある場合は、getSendBufferSize()を呼び出すようにしてください。
バッファ・サイズを大きくすると、送信速度が高い場合にネットワーク実装により複数の送信パケットをキューに入れることが可能になります。
ノート: send(DatagramPacket)を使用してSO_SNDBUFの設定より大きいDatagramPacketを送信する場合、パケットが送信されるか破棄されるかは実装によって異なります。
size - 送信バッファ・サイズの設定サイズ。 この値は0より大きくなければならない。 SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。IllegalArgumentException - 値が0または負の値である場合。getSendBufferSize()public int getSendBufferSize()
throws SocketException
DatagramSocketで使われるSO_SNDBUFオプションの値を取得します。これは、このDatagramSocketで出力用としてプラットフォームが使うバッファのサイズです。DatagramSocketのSO_SNDBUFオプションの値SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。setSendBufferSize(int)public void setReceiveBufferSize(int size)
throws SocketException
DatagramSocketに指定された値に設定します。 SO_RCVBUFオプションは、使用するネットワーク入出力バッファのサイズを設定するヒントとして、ネットワーク実装が使います。 また、ネットワーク実装は、このソケットで受信できるパケットの最大サイズを判定するためにもSO_RCVBUF設定を使います。
SO_RCVBUFはヒントなので、アプリケーションでバッファのサイズ設定を調べる必要がある場合は、getReceiveBufferSize()を呼び出してください。
SO_RCVBUFの値を大きくすると、receive(DatagramPacket)を使用した受信より速くパケットが到達する場合に、ネットワーク実装による複数のパケットのバッファリングが可能になる場合があります。
ノート: SO_RCVBUFより大きいパケットを受信できるかどうかは実装によって異なります。
size - 受信バッファ・サイズの設定サイズ。 この値は0より大きくなければならない。 SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。IllegalArgumentException - 値が0または負の値である場合。getReceiveBufferSize()public int getReceiveBufferSize()
throws SocketException
DatagramSocketで使われるSO_RCVBUFオプションの値を取得します。これは、このDatagramSocketで入力用としてプラットフォームが使うバッファのサイズです。DatagramSocketのSO_RCVBUFオプションの値SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。setReceiveBufferSize(int)public void setReuseAddress(boolean on)
throws SocketException
UDPソケットの場合、複数のソケットを同じソケット・アドレスにバインドすることが必要になることがあります。 マルチキャスト・パケットを受信するためには通常このようにします(MulticastSocketを参照)。 bind(SocketAddress)を使用してソケットをバインドする前にSO_REUSEADDRソケット・オプションが有効になっていれば、SO_REUSEADDRソケット・オプションを使って複数のソケットを同一のソケット・アドレスにバインドすることができます。
ノート:この機能は、既存のすべてのプラットフォームでサポートされているわけではありません。したがって、このオプションが無視されるかどうかは実装によって異なります。 ただし、この機能がサポートされていない場合、getReuseAddress()は常にfalseを返します。
DatagramSocketが作成されると、SO_REUSEADDRの初期設定は無効になります。
ソケットがバインドされた(isBound()を参照)あとでSO_REUSEADDRを有効または無効にする場合の動作は定義されていません。
on - 有効にするか無効にするかを指定SocketException - SO_RESUEADDRソケット・オプションの有効化または無効化時にエラーが発生した場合、またはソケットがクローズされている場合。getReuseAddress(), bind(SocketAddress), isBound(), isClosed()public boolean getReuseAddress()
throws SocketException
boolean値。SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。setReuseAddress(boolean)public void setBroadcast(boolean on)
throws SocketException
一部のオペレーティング・システムでは、このオプションを有効するため、つまりブロードキャスト・データグラムを送信するために、実装固有の特権でJava仮想マシンを起動する必要があります。
on - ブロードキャストをオンにするかどうかを指定。SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。getBroadcast()public boolean getBroadcast()
throws SocketException
boolean値。SocketException - 基本となるプロトコルでUDPエラーなどのエラーが発生した場合。setBroadcast(boolean)public void setTrafficClass(int tc)
throws SocketException
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 - トラフィック・クラスまたはサービス・タイプの設定時にエラーが発生した場合getTrafficClass()public int getTrafficClass()
throws SocketException
使用するネットワーク実装が、setTrafficClass(int)を使用して設定されたトラフィック・クラスまたはサービス型を無視することがあるので、このDatagramSocketでsetTrafficClass(int)メソッドを使用して以前に設定された値とは異なる値がこのメソッドから返されることがあります。
SocketException - トラフィック・クラスまたはサービス・タイプの値を取得する際にエラーが発生した場合。setTrafficClass(int)public void close()
このソケットのreceive(java.net.DatagramPacket)で現在ブロックされているすべてのスレッドがSocketExceptionをスローします。
このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。
close、インタフェースCloseableclose、インタフェースAutoCloseablepublic boolean isClosed()
public DatagramChannel getChannel()
DatagramChannelオブジェクトを返します(存在する場合)。
チャネル自体がDatagramChannel.openメソッドを使用して作成された場合にだけ、データグラム・ソケットにチャネルが存在します。
nullpublic static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
アプリケーションで新しいデータグラム・ソケットを作成すると、ソケット実装ファクトリのcreateDatagramSocketImplメソッドが呼び出され、実際のデータグラム・ソケット実装が作成されます。
このメソッドにnullを渡しても、ファクトリがすでに設定されていないかぎり、それは無操作になります。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、このメソッドは最初にセキュリティ・マネージャのcheckSetFactoryメソッドを呼び出します。 この結果、SecurityExceptionがスローされることがあります。
fac - 目的のファクトリ。IOException−データグラム・ソケット・ファクトリの設定中に入出力エラーが発生した場合。SocketException - ファクトリがすでに定義されている場合。SecurityException - セキュリティ・マネージャが存在し、そのcheckSetFactoryメソッドでこの操作が許可されていない場合。DatagramSocketImplFactory.createDatagramSocketImpl(), SecurityManager.checkSetFactory() バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。