|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object | +--java.net.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
- 導入されたバージョン:
- 1.4
- 関連項目:
getInetAddress()
,
getPort()
,
#connect(SocketAddress, int)
,
connect(SocketAddress)
public SocketAddress getLocalSocketAddress()
null を返します。
- 戻り値:
- このソケットのローカル端点を表す
SocketAddress
。ソケットがまだバインドされていない場合は null
- 導入されたバージョン:
- 1.4
- 関連項目:
getLocalAddress()
,
getLocalPort()
,
bind(SocketAddress)
public void send(DatagramPacket p) throws IOException
DatagramPacket
には、送信するデータ、データの長さ、リモートホストの IP アドレス、およびリモートホスト上のポート番号などの情報が格納されています。
セキュリティマネージャが存在する場合、ソケットがリモートアドレスに接続されていないときは、このメソッドはまずなんらかのセキュリティチェックを実行します。最初は、p.getAddress().isMulticastAddress()
が true の場合、このメソッドはセキュリティマネージャの checkMulticast
メソッドを、引数として p.getAddress()
を指定して呼び出します。上記の式の結果が 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()
を使用して 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()
を使用した受信より速くパケットが到達する場合に、ネットワーク実装による複数のパケットのバッファリングが可能になる場合があります。
注: 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 ソケットの場合、複数のソケットを同じソケットアドレスにバインドすることが必要になることがあります。マルチキャストパケットを受信するためには通常このようにします (#java.net.MulticastSocket
を参照)。bind(SocketAddress)
を使用してソケットをバインドする前に SO_REUSEADDR ソケットオプションが有効になっていれば、SO_REUSEADDR ソケットオプションを使って複数のソケットを同一のソケットアドレスにバインドすることができます。
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) バージョン 4 の場合、RFC 1349 で説明されているように、この値は優先度の高い octet と TOS フィールドで構成されます。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()
を使用して設定されたトラフィッククラスまたはサービスタイプを無視することがあるので、この DatagramSocket で #setTrafficClass()
メソッドを使用して以前に設定された値とは異なる値がこのメソッドから返されることがあります。
SocketException
- トラフィッククラスまたはサービスタイプ値を取得するときにエラーが発生した場合setTrafficClass(int)
public void close()
現在このソケットの {#link receive} でブロックされているすべてのスレッドが SocketException
をスローします。
このソケットに関連するチャネルが存在する場合は、そのチャネルも閉じられます。
public boolean isClosed()
public DatagramChannel getChannel()
DatagramChannel
オブジェクトを返します (存在する場合)。
チャネル自体が DatagramChannel.open
メソッドを使用して作成された場合にだけ、データグラムソケットにチャネルが存在します。
public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
アプリケーションで新しいデータグラムソケットを作成すると、ソケット実装ファクトリの createDatagramSocketImpl
メソッドが呼び出され、実際のデータグラムソケット実装が作成されます。
セキュリティマネージャが存在する場合、このメソッドは最初にセキュリティマネージャの checkSetFactory
メソッドを呼び出すことにより、この操作が許可されていることを確認します。この結果、SecurityException になることがあります。
fac
- 目的のファクトリ
IOException
- データグラムソケットファクトリの設定中に入出力エラーが発生した場合
SocketException
- ファクトリがすでに定義されている場合
SecurityException
- セキュリティマネージャが存在し、セキュリティマネージャの checkSetFactory
メソッドがこの操作を許可しない場合DatagramSocketImplFactory.createDatagramSocketImpl()
,
SecurityManager.checkSetFactory()
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.