- java.lang.Object
-
- java.net.DatagramSocket
-
- java.net.MulticastSocket
-
- すべての実装されたインタフェース:
Closeable
,AutoCloseable
public class MulticastSocket extends DatagramSocket
マルチキャスト・データグラム・ソケット・クラスは、IPマルチキャスト・パケットを送受信する場合に役立ちます。 MulticastSocketは、インターネット上のほかのマルチキャスト・ホストのグループに参加する機能が追加された(UDP) DatagramSocketです。マルチキャスト・グループは、クラスD IPアドレスと標準のUDPポート番号によって指定されます。 クラスD IPアドレスの範囲は、
224.0.0.0
から239.255.255.255
までです。 アドレス224.0.0.0は予約されており、使用できません。マルチキャスト・グループに参加するには、最初に目的のポートでMulticastSocketを作成し、続いて
joinGroup(InetAddress groupAddr)
メソッドを呼び出します。// join a Multicast group and send the group salutations ... String msg = "Hello"; InetAddress group = InetAddress.getByName("228.5.6.7"); MulticastSocket s = new MulticastSocket(6789); s.joinGroup(group); DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 6789); s.send(hi); // get their responses! byte[] buf = new byte[1000]; DatagramPacket recv = new DatagramPacket(buf, buf.length); s.receive(recv); ... // OK, I'm done talking - leave the group... s.leaveGroup(group);
マルチキャスト・グループにメッセージを送信すると、そのホストとポートのすべての参加者がメッセージを受け取ります(ただしパケットの有効期間内に限られる。詳細は後述)。 マルチキャスト・グループにメッセージを送信するためには、ソケットがそのマルチキャスト・グループのメンバーである必要はありません。ソケットがマルチキャスト・グループまたはポートに参加すると、ほかのホストからそのグループまたはポートに送信されたデータグラムを受信することができます。そのグループとポートの他のメンバーもすべて同じデータグラムを受信します。 ソケットをグループから外すには、leaveGroup(InetAddress addr)メソッドを使用します。 複数のMulticastSocketが並行してマルチキャスト・グループとポートに参加することができ、それらのMulticastSocketはすべてグループ・データグラムを受信します。
現在のところ、アプレットではマルチキャスト・ソケットを使用することはできません。
- 導入されたバージョン:
- 1.1
-
-
コンストラクタのサマリー
コンストラクタ コンストラクタ 説明 MulticastSocket()
マルチキャスト・ソケットを作成します。MulticastSocket(int port)
特定のポートにバインドされたマルチキャスト・ソケットを作成します。MulticastSocket(SocketAddress bindaddr)
指定されたソケット・アドレスにバインドされたMulticastSocketを作成します。
-
メソッドのサマリー
修飾子と型 メソッド 説明 InetAddress
getInterface()
マルチキャスト・パケットに使用するネットワーク・インタフェースのアドレスを取得します。boolean
getLoopbackMode()
マルチキャスト・データグラムのローカル・ループバックの設定値を取得します。NetworkInterface
getNetworkInterface()
マルチキャスト・ネットワーク・インタフェース・セットを取得します。int
getTimeToLive()
このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。byte
getTTL()
非推奨。代わりにgetTimeToLiveメソッドを使用してください。このメソッドは、byteではなくintを返します。void
joinGroup(InetAddress mcastaddr)
あるマルチキャスト・グループに参加します。void
joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
指定されたインタフェースで指定されたマルチキャスト・グループに参加します。void
leaveGroup(InetAddress mcastaddr)
あるマルチキャスト・グループから離れます。void
leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。void
send(DatagramPacket p, byte ttl)
非推奨。代わりに次のコードまたは同等のコードを使用してください: ......void
setInterface(InetAddress inf)
ネットワーク・インタフェースの値によってその動作が影響をうけるメソッドが使用する、マルチキャスト・ネットワーク・インタフェースを設定します。void
setLoopbackMode(boolean disable)
マルチキャスト・データグラムのローカル・ループバックを有効または無効にします。このオプションは、マルチキャスト・データをローカル・ソケットにループ・バックするかどうかを設定するヒントとして、プラットフォームのネットワーク・コードが使います。void
setNetworkInterface(NetworkInterface netIf)
このソケットから送信される送出マルチキャスト・データグラム用のネットワーク・インタフェースを指定します。void
setTimeToLive(int ttl)
マルチキャストのスコープを制御するために、このMulticastSocket
から送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。void
setTTL(byte ttl)
非推奨。代わりにsetTimeToLiveメソッドを使用してください。このメソッドはttlの型として、byteではなくintを使用します。-
クラス java.net.DatagramSocketで宣言されたメソッド
bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getOption, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setOption, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass, supportedOptions
-
-
-
-
コンストラクタの詳細
-
MulticastSocket
public MulticastSocket() throws IOException
マルチキャスト・ソケットを作成します。セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にその
checkListen
メソッドが0を引数に指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、
DatagramSocket.setReuseAddress(boolean)
メソッドが呼び出されます。- 例外:
IOException
- MulticastSocketの作成中に入出力例外が発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckListen
メソッドでこの操作が許可されていない場合。- 関連項目:
SecurityManager.checkListen(int)
,DatagramSocket.setReuseAddress(boolean)
,DatagramSocketImpl.setOption(SocketOption, Object)
-
MulticastSocket
public MulticastSocket(int port) throws IOException
特定のポートにバインドされたマルチキャスト・ソケットを作成します。セキュリティ・マネージャが存在する場合、この操作が許可されるように、最初にその
checkListen
メソッドがport
引数をその引数として指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、
DatagramSocket.setReuseAddress(boolean)
メソッドが呼び出されます。- パラメータ:
port
- 使用するポート- 例外:
IOException
- MulticastSocketの作成中に入出力例外が発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckListen
メソッドでこの操作が許可されていない場合。- 関連項目:
SecurityManager.checkListen(int)
,DatagramSocket.setReuseAddress(boolean)
-
MulticastSocket
public MulticastSocket(SocketAddress bindaddr) throws IOException
指定されたソケット・アドレスにバインドされたMulticastSocketを作成します。あるいは、アドレスが
null
の場合は、アンバウンドのソケットを作成します。セキュリティ・マネージャが存在する場合、最初にその
checkListen
メソッドがSocketAddressポートを引数に指定して呼び出され、この操作が許可されるかどうかが確認されます。 この結果、SecurityExceptionがスローされることがあります。ソケットが作成されると、SO_REUSEADDRソケット・オプションを有効にするために、
DatagramSocket.setReuseAddress(boolean)
メソッドが呼び出されます。- パラメータ:
bindaddr
−バインドするソケット・アドレス。アンバウンドのソケットの場合はnull
。- 例外:
IOException
- MulticastSocketの作成中に入出力例外が発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckListen
メソッドでこの操作が許可されていない場合。- 導入されたバージョン:
- 1.4
- 関連項目:
SecurityManager.checkListen(int)
,DatagramSocket.setReuseAddress(boolean)
-
-
メソッドの詳細
-
setTTL
@Deprecated public void setTTL(byte ttl) throws IOException
非推奨。代わりにsetTimeToLiveメソッドを使用してください。このメソッドはttlの型として、byteではなくintを使用します。マルチキャストのスコープを制御するために、このMulticastSocket
から送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。ttlは符号なし8ビット・データなので、
0 <= ttl <= 0xFF
の範囲でなければいけません。- パラメータ:
ttl
- 有効期間- 例外:
IOException
- デフォルトの有効期間値の設定中に入出力例外が発生した場合- 関連項目:
getTTL()
-
setTimeToLive
public void setTimeToLive(int ttl) throws IOException
マルチキャストのスコープを制御するために、このMulticastSocket
から送信されるマルチキャスト・パケットのデフォルトの有効期間を設定します。ttlの範囲は
0 <= ttl <= 255
でなければいけません。そうでない場合は、IllegalArgumentException
がスローされます。 TTLが0
で送信されたマルチキャスト・パケットは、ネットワークでは転送されませんが、ローカルで転送されることがあります。- パラメータ:
ttl
- 有効期間- 例外:
IOException
- デフォルトの有効期間値の設定中に入出力例外が発生した場合- 関連項目:
getTimeToLive()
-
getTTL
@Deprecated public byte getTTL() throws IOException
非推奨。代わりにgetTimeToLiveメソッドを使用してください。このメソッドは、byteではなくintを返します。このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。- 戻り値:
- デフォルトの有効期間値
- 例外:
IOException
- デフォルトの有効期間値の取得中に入出力例外が発生した場合- 関連項目:
setTTL(byte)
-
getTimeToLive
public int getTimeToLive() throws IOException
このソケットから送信されるマルチキャスト・パケットのデフォルトの有効期間を取得します。- 戻り値:
- デフォルトの有効期間値
- 例外:
IOException
- デフォルトの有効期間値の取得中に入出力例外が発生した場合- 関連項目:
setTimeToLive(int)
-
joinGroup
public void joinGroup(InetAddress mcastaddr) throws IOException
あるマルチキャスト・グループに参加します。 その動作は、setInterface
またはsetNetworkInterface
の影響を受ける可能性があります。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddr
を引数に指定してcheckMulticast
メソッドを呼び出します。- パラメータ:
mcastaddr
- 参加するマルチキャスト・アドレス- 例外:
IOException
- 接続にエラーがある場合、またはアドレスがマルチキャスト・アドレスでない場合、またはプラットフォームがマルチキャストをサポートしていない場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckMulticast
メソッドが参加を許可しない場合。- 関連項目:
SecurityManager.checkMulticast(InetAddress)
-
leaveGroup
public void leaveGroup(InetAddress mcastaddr) throws IOException
あるマルチキャスト・グループから離れます。 その動作は、setInterface
またはsetNetworkInterface
の影響を受ける可能性があります。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddr
を引数に指定してcheckMulticast
メソッドを呼び出します。- パラメータ:
mcastaddr
- 離れるマルチキャスト・アドレス- 例外:
IOException
- 離れる際にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckMulticast
メソッドでこの操作が許可されていない場合。- 関連項目:
SecurityManager.checkMulticast(InetAddress)
-
joinGroup
public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
指定されたインタフェースで指定されたマルチキャスト・グループに参加します。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddr
を引数に指定してcheckMulticast
メソッドを呼び出します。- パラメータ:
mcastaddr
- 参加するマルチキャスト・アドレスnetIf
- マルチキャスト・データグラム・パケットを受信するローカル・インタフェースを指定します。または、nullを指定して、setInterface(InetAddress)
またはsetNetworkInterface(NetworkInterface)
によって設定されているインタフェースに従います。- 例外:
IOException
- 接続にエラーがある場合、またはアドレスがマルチキャスト・アドレスでない場合、またはプラットフォームがマルチキャストをサポートしていない場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckMulticast
メソッドが参加を許可しない場合。IllegalArgumentException
- mcastaddrがnullであるか、このソケットによってサポートされていないSocketAddressサブクラスである場合- 導入されたバージョン:
- 1.4
- 関連項目:
SecurityManager.checkMulticast(InetAddress)
-
leaveGroup
public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
指定されたローカル・インタフェース上のマルチキャスト・グループから離れます。セキュリティ・マネージャが存在する場合、このメソッドは最初に、
mcastaddr
を引数に指定してcheckMulticast
メソッドを呼び出します。- パラメータ:
mcastaddr
- 離れるマルチキャスト・アドレスnetIf
- ローカル・インタフェースを指定します。または、nullを指定して、setInterface(InetAddress)
またはsetNetworkInterface(NetworkInterface)
によって設定されているインタフェースに従います。- 例外:
IOException
- 離れる際にエラーが発生した場合、またはアドレスがマルチキャスト・アドレスでない場合。SecurityException
- セキュリティ・マネージャが存在し、そのcheckMulticast
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- mcastaddrがnullであるか、このソケットによってサポートされていないSocketAddressサブクラスである場合- 導入されたバージョン:
- 1.4
- 関連項目:
SecurityManager.checkMulticast(InetAddress)
-
setInterface
public void setInterface(InetAddress inf) throws SocketException
ネットワーク・インタフェースの値によってその動作が影響をうけるメソッドが使用する、マルチキャスト・ネットワーク・インタフェースを設定します。 マルチホームのホストに便利です。- パラメータ:
inf
− InetAddress- 例外:
SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 関連項目:
getInterface()
-
getInterface
public InetAddress getInterface() throws SocketException
マルチキャスト・パケットに使用するネットワーク・インタフェースのアドレスを取得します。- 戻り値:
- マルチキャスト・パケットに使用するネットワーク・インタフェースのアドレスを表す
InetAddress
。 - 例外:
SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 関連項目:
setInterface(java.net.InetAddress)
-
setNetworkInterface
public void setNetworkInterface(NetworkInterface netIf) throws SocketException
このソケットから送信される送出マルチキャスト・データグラム用のネットワーク・インタフェースを指定します。- パラメータ:
netIf
−インタフェース- 例外:
SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 導入されたバージョン:
- 1.4
- 関連項目:
getNetworkInterface()
-
getNetworkInterface
public NetworkInterface getNetworkInterface() throws SocketException
マルチキャスト・ネットワーク・インタフェース・セットを取得します。- 戻り値:
- 現在設定されているマルチキャスト
NetworkInterface
- 例外:
SocketException
- 使用しているプロトコルでエラー(TCPエラーなど)が発生した場合。- 導入されたバージョン:
- 1.4
- 関連項目:
setNetworkInterface(NetworkInterface)
-
setLoopbackMode
public void setLoopbackMode(boolean disable) throws SocketException
マルチキャスト・データグラムのローカル・ループバックを有効または無効にします。このオプションは、マルチキャスト・データをローカル・ソケットにループ・バックするかどうかを設定するヒントとして、プラットフォームのネットワーク・コードが使います。このオプションはヒントなので、アプリケーションでループバック・モードの設定を調べる必要がある場合は、
getLoopbackMode()
を呼び出してください。- パラメータ:
disable
−LoopbackModeを無効にする場合はtrue
- 例外:
SocketException
−値の設定中にエラーが発生した場合- 導入されたバージョン:
- 1.4
- 関連項目:
getLoopbackMode()
-
getLoopbackMode
public boolean getLoopbackMode() throws SocketException
マルチキャスト・データグラムのローカル・ループバックの設定値を取得します。- 戻り値:
- LoopbackModeが無効になった場合はtrue
- 例外:
SocketException
−値の取得中にエラーが発生した場合- 導入されたバージョン:
- 1.4
- 関連項目:
setLoopbackMode(boolean)
-
send
@Deprecated public void send(DatagramPacket p, byte ttl) throws IOException
非推奨。代わりに、次のコードまたはそれと同等のコードを使用してください。...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(p); mcastSocket.setTimeToLive(ttl); ......このソケットのデフォルト以外のTTL (有効期間)を使って、データグラム・パケットを宛先に送信します。 このメソッドを使用する必要があるのは、特定のTTLが必要とされる場合だけです。それ以外の場合は、このソケット上でTTLを一度だけ設定し、そのデフォルトのTTLをすべてのパケットで使用することをお薦めします。 このメソッドは、ソケットのデフォルトのTTLを変更しません。 その動作は、setInterface
の影響を受ける可能性があります。セキュリティ・マネージャが存在する場合、このメソッドはまず、いくつかのセキュリティ・チェックを実行します。 最初に、
p.getAddress().isMulticastAddress()
がtrueの場合、このメソッドは引数としてp.getAddress()
とttl
を使い、セキュリティ・マネージャのcheckMulticast
メソッドを呼び出します。 その式の評価がfalseの場合、このメソッドは代わりに、セキュリティ・マネージャのcheckConnect
メソッドを、引数p.getAddress().getHostAddress()
とp.getPort()
を指定して呼び出します。 それぞれのセキュリティ・マネージャ・メソッド呼出しの結果、操作が許可されない場合はSecurityExceptionがスローされます。- パラメータ:
p
−送信されるパケット。 パケットには、宛先のマルチキャストIPアドレスと送信対象のデータを含めるべきである。 ある宛先マルチキャスト・アドレスにパケットを送信するには、そのグループのメンバーである必要はない。ttl
−マルチキャスト・パケットの有効期間(オプション)。デフォルトttl値は1。- 例外:
IOException
−エラーが発生した場合、具体的にはttlの設定中にエラーが発生した場合に発行されます。SecurityException
- セキュリティ・マネージャが存在し、そのcheckMulticast
またはcheckConnect
メソッドが送信を許可しない場合。- 関連項目:
DatagramSocket.send(java.net.DatagramPacket)
,DatagramSocket.receive(java.net.DatagramPacket)
,SecurityManager.checkMulticast(java.net.InetAddress, byte)
,SecurityManager.checkConnect(java.lang.String, int)
-
-