JavaTM 2 Platform
Standard Ed. 6

java.net
類別 MulticastSocket

java.lang.Object
  繼承者 java.net.DatagramSocket
      繼承者 java.net.MulticastSocket

public class MulticastSocket
extends DatagramSocket

多點傳送資料電報Socket類別用於發送和接收 IP 多點傳送套件。MulticastSocket 是一種 (UDP) DatagramSocket,它具有加入 Internet 上其他多點傳送主機的“組”的附加功能。

多點傳送組通過 D 類別 IP 位址和標準 UDP 埠號號指定。D 類別 IP 位址在 224.0.0.0239.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);
 
將訊息發送到多點傳送組時,該主機和埠號的所有預定接收者都將接收到訊息(在資料封包的生存時間範圍內,請參閱下文)。Socket不必成為多點傳送組的成員即可向其發送訊息。

當Socket預定多點傳送組/埠號時,它將接收由該組/埠號的其他主機發送的資料電報,像該組和埠號的所有其他成員一樣。Socket通過 leaveGroup(InetAddress addr) 方法放棄組中的成員資格。多個 MulticastSocket 可以同時預定多點傳送組和埠號,並且都會接收到組資料電報。

同時,不允許 applet 使用多點傳送Socket。

從以下版本開始:
JDK1.1

建構子摘要
MulticastSocket()
          創建多點傳送Socket。
MulticastSocket(int port)
          創建多點傳送Socket並將其綁定到特定埠號。
MulticastSocket(SocketAddress bindaddr)
          創建綁定到指定Socket位址的 MulticastSocket。
 
方法摘要
 InetAddress getInterface()
          獲取用於多點傳送資料封包的網路介面的位址。
 boolean getLoopbackMode()
          獲取多點傳送資料電報的本地回送的設置。
 NetworkInterface getNetworkInterface()
          獲取多點傳送網路介面集合。
 int getTimeToLive()
          獲取在Socket上發出的多點傳送資料封包的預設生存時間。
 byte getTTL()
          已過時。 使用 getTimeToLive 方法來代替,該方法返回 int(而不是 byte)。
 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)
          已過時。 使用以下程式碼或其等效程式碼:...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(p); mcastSocket.setTimeToLive(ttl); ......
 void setInterface(InetAddress inf)
          設置多點傳送網路介面,供其行為將受網路介面值影響的方法使用。
 void setLoopbackMode(boolean disable)
          啟用/禁用多點傳送資料電報的本地回送。
 void setNetworkInterface(NetworkInterface netIf)
          指定在此Socket上發送的輸出多點傳送資料電報的網路介面。
 void setTimeToLive(int ttl)
          設置在此 MulticastSocket 上發出的多點傳送資料封包的預設生存時間,以便控制多點傳送的範圍。
 void setTTL(byte ttl)
          已過時。 使用 setTimeToLive 方法來代替,該方法使用 int(而不用 byte)作為 ttl 的型別。
 
從類別 java.net.DatagramSocket 繼承的方法
bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

MulticastSocket

public MulticastSocket()
                throws IOException
創建多點傳送Socket。

如果有安全管理器,則首先使用 0 作為變數來調用其 checkListen 方法,以確保允許該操作。這可能會導致 SecurityException 異常。

創建Socket時,將調用 DatagramSocket.setReuseAddress(boolean) 方法來啟用 SO_REUSEADDR Socket選項。

拋出:
IOException - 如果在創建 MulticastSocket 時發生 I/O 異常
SecurityException - 如果安全管理器存在並且其 checkListen 方法不允許進行該操作。
另請參見:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(int port)
                throws IOException
創建多點傳送Socket並將其綁定到特定埠號。

如果存在安全管理器,則首先使用 port 參數作為參數調用其 checkListen 方法,以確保允許該操作。這可能會導致 SecurityException 異常。

創建Socket時,將調用 DatagramSocket.setReuseAddress(boolean) 方法來啟用 SO_REUSEADDR Socket選項。

參數:
port - 要使用的埠號
拋出:
IOException - 如果在創建 MulticastSocket 時發生 I/O 異常
SecurityException - 如果安全管理器存在並且其 checkListen 方法不允許進行該操作。
另請參見:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(SocketAddress bindaddr)
                throws IOException
創建綁定到指定Socket位址的 MulticastSocket。

或者,如果位址為 null,則創建未綁定Socket。

如果有安全管理器,則首先使用 SocketAddress 埠號作為參數來調用其 checkListen 方法,以確保允許該操作。這可能會導致 SecurityException 異常。

創建Socket時,將調用 DatagramSocket.setReuseAddress(boolean) 方法來啟用 SO_REUSEADDR Socket選項。

參數:
bindaddr - 要綁定到的Socket位址;或者為 null,它表示非綁定Socket。
拋出:
IOException - 如果在創建 MulticastSocket 時發生 I/O 異常
SecurityException - 如果安全管理器存在並且其 checkListen 方法不允許進行該操作。
從以下版本開始:
1.4
另請參見:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)
方法詳細資訊

setTTL

@Deprecated
public void setTTL(byte ttl)
            throws IOException
已過時。 使用 setTimeToLive 方法來代替,該方法使用 int(而不用 byte)作為 ttl 的型別。

設置在此 MulticastSocket 上發出的多點傳送資料封包的預設生存時間,以便控制多點傳送的範圍。

ttl 為無符號 8 位量,所以其必須0 <= ttl <= 0xFF 範圍內。

參數:
ttl - 生存時間
拋出:
IOException - 如果在設置預設生存時間值時發生 I/O 異常
另請參見:
getTTL()

setTimeToLive

public void setTimeToLive(int ttl)
                   throws IOException
設置在此 MulticastSocket 上發出的多點傳送資料封包的預設生存時間,以便控制多點傳送的範圍。

ttl 必須0 <= ttl <= 255 範圍內,否則將拋出 IllegalArgumentException。

參數:
ttl - 生存時間
拋出:
IOException - 如果在設置預設生存時間值時發生 I/O 異常
另請參見:
getTimeToLive()

getTTL

@Deprecated
public byte getTTL()
            throws IOException
已過時。 使用 getTimeToLive 方法來代替,該方法返回 int(而不是 byte)。

獲取在Socket上發出的多點傳送資料封包的預設生存時間。

返回:
預設生存時間值
拋出:
IOException - 如果在獲取預設生存時間值時發生 I/O 異常
另請參見:
setTTL(byte)

getTimeToLive

public int getTimeToLive()
                  throws IOException
獲取在Socket上發出的多點傳送資料封包的預設生存時間。

返回:
預設生存時間值
拋出:
IOException - 如果在獲取預設生存時間值時發生 I/O 異常
另請參見:
setTimeToLive(int)

joinGroup

public void joinGroup(InetAddress mcastaddr)
               throws IOException
加入多點傳送組。其行為可能受到 setInterfacesetNetworkInterface 的影響。

如果有安全管理器,則此方法首先使用 mcastaddr 作為參數來調用其 checkMulticast 方法。

參數:
mcastaddr - 要加入的多點傳送位址
拋出:
IOException - 如果存在錯誤加入或者當位址不是多點傳送位址時。
SecurityException - 如果安全管理器存在並且其 checkMulticast 方法不允許加入。
另請參見:
SecurityManager.checkMulticast(InetAddress)

leaveGroup

public void leaveGroup(InetAddress mcastaddr)
                throws IOException
離開多點傳送組。其行為可能受到 setInterfacesetNetworkInterface 的影響。

如果有安全管理器,則此方法首先使用 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 或者為此Socket不支持的 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 或者為此Socket不支持的 SocketAddress 子類別。
從以下版本開始:
1.4
另請參見:
SecurityManager.checkMulticast(InetAddress)

setInterface

public void setInterface(InetAddress inf)
                  throws SocketException
設置多點傳送網路介面,供其行為將受網路介面值影響的方法使用。對多宿主機 (multihomed host) 很有用。

參數:
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
指定在此Socket上發送的輸出多點傳送資料電報的網路介面。

參數:
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
啟用/禁用多點傳送資料電報的本地回送。平臺的網路程式碼將該選項用作設置是否將多點傳送資料回送到本地Socket的提示。

因為此選項是一個提示,所以要驗證回送的設置網要的應用程序應該調用 getLoopbackMode()

參數:
disable - 為 true 表示禁用 LoopbackMode
拋出:
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); ......

利用Socket的預設值之外的 TTL(生存時間)將資料電報封包發送到目的地。只有在需要特定 TTL 的實例中才需要使用此方法;否則,優先考慮在Socket上設置一次 TTL 並將該預設 TTL 用於所有資料封包。此方法改變Socket的預設 TTL。其行為可能受到 setInterface 的影響。

如果存在安全管理器,則此方法首先執行某些安全檢查。首先,如果 p.getAddress().isMulticastAddress() 為 true,則此方法將使用 p.getAddress()ttl 作為參數調用安全管理器的 checkMulticast 方法。如果該表達式的計算為 false,則此方法改為調用安全管理器的以 p.getAddress().getHostAddress()p.getPort() 為參數的 checkConnect 方法。如果不允許該操作,則每次調用安全管理器方法都會導致 SecurityException。

參數:
p - 要發送的資料封包。資料封包應該套件含目標多點傳送 ip 位址和要發送的資料。不必成為組成員即可將資料封包發送到目標多點傳送位址。
ttl - 多點傳送資料封包的可選生存時間。預設的 ttl 為 1。
拋出:
IOException - 如果發生錯誤(即設置 ttl 時出錯)則引發該異常。
SecurityException - 如果安全管理器存在並且其 checkMulticastcheckConnect 方法不允許發送。
另請參見:
DatagramSocket.send(java.net.DatagramPacket), DatagramSocket.receive(java.net.DatagramPacket), SecurityManager.checkMulticast(java.net.InetAddress, byte), SecurityManager.checkConnect(java.lang.String, int)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only