|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.net.DatagramSocket
public class DatagramSocket
このクラスは、データグラムパケットを送受信するためのソケットを表します。
データグラムソケットは、パケット配信サービスの送信点または受信点です。データグラムソケット上で送信または受信する各パケットは、それぞれ異なるアドレスで経路を指定されます。あるマシンから別のマシンに複数のパケットを送信する場合、各パケットは異なる経路で送信される可能性があり、宛先には任意の順序で到達する可能性があります。
UDP ブロードキャストの送信は、DatagramSocket 上で常に有効になっています。ブロードキャストパケットを受信するときは、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 オプションの値を取得します。 |
SocketAddress |
getRemoteSocketAddress()
このソケットが接続されている端点のアドレスを返します。 |
boolean |
getReuseAddress()
SO_REUSEADDR が有効かどうかを調べます。 |
int |
getSendBufferSize()
この DatagramSocket で使われる SO_SNDBUF オプションの値を取得します。 |
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 を設定します。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
public DatagramSocket() throws SocketException
セキュリティーマネージャーが存在する場合、最初にその 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
セキュリティーマネージャーが存在する場合、その checkListen
メソッドが port
引数をその引数として指定して呼び出され、この操作が許可されるかどうかが確認されます。この結果、SecurityException がスローされることがあります。
port
- 使用するポート
SocketException
- ソケットを開くことができなかった場合、または指定されたローカルポートにソケットをバインドできなかった場合
SecurityException
- セキュリティーマネージャーが存在し、その checkListen
メソッドがこの操作を許可しない場合SecurityManager.checkListen(int)
public DatagramSocket(int port, InetAddress laddr) throws SocketException
セキュリティーマネージャーが存在する場合、その 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 がスローされることがあります。例外が必ずスローされるとは限らないことに注意
指定されたホストおよびポートとのデータグラムの送受信を行うための呼び出し側のアクセス権は、接続時に確認されます。ソケットが接続されたとき、送受信ではパケットの受信および送信に対するセキュリティーチェックを行いません。ただし、パケットとソケットのアドレスおよびポートが一致するかどうかの確認は行います。送信の処理では、パケットのアドレスが設定されている場合に、パケットのアドレスとソケットのアドレスが一致しないときは、IllegalArgumentException がスローされます。マルチキャストアドレスに接続されているソケットは、送信パケットだけに使用できます。
address
- ソケットが使うリモートアドレスport
- ソケットが使うリモートポート
IllegalArgumentException
- アドレスが null である場合、またはポートが範囲外の場合
SecurityException
- 指定されたアドレスおよびポートとのデータグラムの送受信が、呼び出し側に許可されていない場合disconnect()
,
send(java.net.DatagramPacket)
,
receive(java.net.DatagramPacket)
public void connect(SocketAddress addr) throws SocketException
addr
- リモートアドレス
SocketException
- 接続に失敗した場合
IllegalArgumentException
- addr が null である場合、または addr がこのソケットでサポートされていない SocketAddress サブクラスである場合connect(java.net.InetAddress, int)
public void disconnect()
connect(java.net.InetAddress, int)
public boolean isBound()
public boolean isConnected()
public InetAddress getInetAddress()
public int getPort()
public SocketAddress getRemoteSocketAddress()
null
を返します。
SocketAddress
。ソケットがまだ接続されていない場合は null
getInetAddress()
,
getPort()
,
connect(SocketAddress)
public SocketAddress getLocalSocketAddress()
null
を返します。
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
- ソケットに関連したチャネルが存在し、そのチャネルが非ブロックモードの場合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
,
DatagramSocket
public InetAddress getLocalAddress()
セキュリティーマネージャーが存在する場合は、まずセキュリティーマネージャーの checkConnect
メソッドがホストアドレスおよび -1
を引数として呼び出され、操作が許可されるかどうかが確認されます。
checkConnect
メソッドがこの操作を許可しない場合は、任意のローカルアドレスを表す InetAddress
SecurityManager.checkConnect(java.lang.String, int)
public int getLocalPort()
public void setSoTimeout(int timeout) throws SocketException
timeout
- ミリ秒で表される、指定された待ち時間
SocketException
- 基本となるプロトコルで UDP エラーなどのエラーが発生した場合getSoTimeout()
public int getSoTimeout() throws SocketException
SocketException
- 基本となるプロトコルで UDP エラーなどのエラーが発生した場合setSoTimeout(int)
public void setSendBufferSize(int size) throws SocketException
SO_SNDBUF はヒントなので、アプリケーションでバッファーのサイズを調べる必要がある場合は、getSendBufferSize()
を呼び出すようにしてください。
バッファーサイズを大きくすると、送信速度が高い場合にネットワーク実装により複数の送信パケットをキューに入れることが可能になります。
注:send(DatagramPacket)
を使用して SO_SNDBUF の設定より大きい DatagramPacket
を送信する場合、パケットが送信されるか破棄されるかは実装によって異なります。
size
- 送信バッファーサイズの設定サイズ。この値は 0 より大きくなければならない
SocketException
- 基本となるプロトコルで UDP エラーなどのエラーが発生した場合
IllegalArgumentException
- 値が 0 または負の値である場合getSendBufferSize()
public int getSendBufferSize() throws SocketException
SocketException
- 基本となるプロトコルで UDP エラーなどのエラーが発生した場合setSendBufferSize(int)
public void setReceiveBufferSize(int size) throws SocketException
SO_RCVBUF はヒントなので、アプリケーションでバッファーのサイズ設定を調べる必要がある場合は、getReceiveBufferSize()
を呼び出してください。
SO_RCVBUF の値を大きくすると、receive(DatagramPacket)
を使用した受信より速くパケットが到達する場合に、ネットワーク実装による複数のパケットのバッファリングが可能になる場合があります。
注:SO_RCVBUF より大きいパケットを受信できるかどうかは実装によって異なります。
size
- 受信バッファーサイズの設定サイズ。この値は 0 より大きくなければならない
SocketException
- 基本となるプロトコルで UDP エラーなどのエラーが発生した場合
IllegalArgumentException
- 値が 0 または負の値である場合getReceiveBufferSize()
public int getReceiveBufferSize() throws SocketException
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
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) Version 4 の場合、RFC 1349 で説明されているように、この値は優先度の高い octet と TOS フィールドで構成されます。TOS フィールドは、次のようにビット単位の論理和によって作成されるビットセットです。
IPTOS_LOWCOST (0x02)
IPTOS_RELIABILITY (0x04)
IPTOS_THROUGHPUT (0x08)
IPTOS_LOWDELAY (0x10)
優先フィールドにビットを設定すると、操作が許可されないことを示す SocketException になることがあります。
IP (Internet Protocol) Version 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
をスローします。
このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。
public boolean isClosed()
public DatagramChannel getChannel()
DatagramChannel
オブジェクトを返します (存在する場合)。
チャネル自体が DatagramChannel.open
メソッドを使用して作成された場合にだけ、データグラムソケットにチャネルが存在します。
public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
アプリケーションで新しいデータグラムソケットを作成すると、ソケット実装ファクトリの createDatagramSocketImpl
メソッドが呼び出され、実際のデータグラムソケット実装が作成されます。
このメソッドに null
を渡しても、ファクトリがすでに設定されていないかぎり、それは無操作になります。
セキュリティーマネージャーが存在する場合、このメソッドは最初にセキュリティーマネージャーの checkSetFactory
メソッドを呼び出すことにより、この操作が許可されていることを確認します。この結果、SecurityException がスローされることがあります。
fac
- 目的のファクトリ
IOException
- データグラムソケットファクトリの設定中に入出力エラーが発生した場合
SocketException
- ファクトリがすでに定義されている場合
SecurityException
- セキュリティーマネージャーが存在し、その checkSetFactory
メソッドがこの操作を許可しない場合DatagramSocketImplFactory.createDatagramSocketImpl()
,
SecurityManager.checkSetFactory()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。