|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.net.DatagramSocket java.net.MulticastSocket
public class MulticastSocket
多點傳送資料電報Socket類別用於發送和接收 IP 多點傳送套件。MulticastSocket 是一種 (UDP) DatagramSocket,它具有加入 Internet 上其他多點傳送主機的“組”的附加功能。
多點傳送組通過 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);將訊息發送到多點傳送組時,該主機和埠號的所有預定接收者都將接收到訊息(在資料封包的生存時間範圍內,請參閱下文)。Socket不必成為多點傳送組的成員即可向其發送訊息。
當Socket預定多點傳送組/埠號時,它將接收由該組/埠號的其他主機發送的資料電報,像該組和埠號的所有其他成員一樣。Socket通過 leaveGroup(InetAddress addr) 方法放棄組中的成員資格。多個 MulticastSocket 可以同時預定多點傳送組和埠號,並且都會接收到組資料電報。
同時,不允許 applet 使用多點傳送Socket。
建構子摘要 | |
---|---|
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.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
建構子詳細資訊 |
---|
public MulticastSocket() throws IOException
如果有安全管理器,則首先使用 0 作為變數來調用其 checkListen
方法,以確保允許該操作。這可能會導致 SecurityException 異常。
創建Socket時,將調用 DatagramSocket.setReuseAddress(boolean)
方法來啟用 SO_REUSEADDR Socket選項。
IOException
- 如果在創建 MulticastSocket 時發生 I/O 異常
SecurityException
- 如果安全管理器存在並且其 checkListen
方法不允許進行該操作。SecurityManager.checkListen(int)
,
DatagramSocket.setReuseAddress(boolean)
public MulticastSocket(int port) throws IOException
如果存在安全管理器,則首先使用 port
參數作為參數調用其 checkListen
方法,以確保允許該操作。這可能會導致 SecurityException 異常。
創建Socket時,將調用 DatagramSocket.setReuseAddress(boolean)
方法來啟用 SO_REUSEADDR Socket選項。
port
- 要使用的埠號
IOException
- 如果在創建 MulticastSocket 時發生 I/O 異常
SecurityException
- 如果安全管理器存在並且其 checkListen
方法不允許進行該操作。SecurityManager.checkListen(int)
,
DatagramSocket.setReuseAddress(boolean)
public MulticastSocket(SocketAddress bindaddr) throws IOException
或者,如果位址為 null
,則創建未綁定Socket。
如果有安全管理器,則首先使用 SocketAddress 埠號作為參數來調用其 checkListen
方法,以確保允許該操作。這可能會導致 SecurityException 異常。
創建Socket時,將調用 DatagramSocket.setReuseAddress(boolean)
方法來啟用 SO_REUSEADDR Socket選項。
bindaddr
- 要綁定到的Socket位址;或者為 null
,它表示非綁定Socket。
IOException
- 如果在創建 MulticastSocket 時發生 I/O 異常
SecurityException
- 如果安全管理器存在並且其 checkListen
方法不允許進行該操作。SecurityManager.checkListen(int)
,
DatagramSocket.setReuseAddress(boolean)
方法詳細資訊 |
---|
@Deprecated public void setTTL(byte ttl) throws IOException
MulticastSocket
上發出的多點傳送資料封包的預設生存時間,以便控制多點傳送的範圍。
ttl 為無符號 8 位量,所以其必須在 0 <= ttl <= 0xFF
範圍內。
ttl
- 生存時間
IOException
- 如果在設置預設生存時間值時發生 I/O 異常getTTL()
public void setTimeToLive(int ttl) throws IOException
MulticastSocket
上發出的多點傳送資料封包的預設生存時間,以便控制多點傳送的範圍。
ttl 必須在 0 <= ttl <= 255
範圍內,否則將拋出 IllegalArgumentException。
ttl
- 生存時間
IOException
- 如果在設置預設生存時間值時發生 I/O 異常getTimeToLive()
@Deprecated public byte getTTL() throws IOException
IOException
- 如果在獲取預設生存時間值時發生 I/O 異常setTTL(byte)
public int getTimeToLive() throws IOException
IOException
- 如果在獲取預設生存時間值時發生 I/O 異常setTimeToLive(int)
public void joinGroup(InetAddress mcastaddr) throws IOException
setInterface
或 setNetworkInterface
的影響。
如果有安全管理器,則此方法首先使用 mcastaddr
作為參數來調用其 checkMulticast
方法。
mcastaddr
- 要加入的多點傳送位址
IOException
- 如果存在錯誤加入或者當位址不是多點傳送位址時。
SecurityException
- 如果安全管理器存在並且其 checkMulticast
方法不允許加入。SecurityManager.checkMulticast(InetAddress)
public void leaveGroup(InetAddress mcastaddr) throws IOException
setInterface
或 setNetworkInterface
的影響。
如果有安全管理器,則此方法首先使用 mcastaddr
作為參數來調用其 checkMulticast
方法。
mcastaddr
- 要離開的多點傳送位址
IOException
- 如果存在錯誤離開或者當位址不是多點傳送位址時。
SecurityException
- 如果安全管理器存在並且其 checkMulticast
方法不允許進行該操作。SecurityManager.checkMulticast(InetAddress)
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 子類別。SecurityManager.checkMulticast(InetAddress)
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 子類別。SecurityManager.checkMulticast(InetAddress)
public void setInterface(InetAddress inf) throws SocketException
inf
- InetAddress
SocketException
- 如果在底層協議中存在錯誤,如 TCP 錯誤。getInterface()
public InetAddress getInterface() throws SocketException
InetAddress
。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setInterface(java.net.InetAddress)
public void setNetworkInterface(NetworkInterface netIf) throws SocketException
netIf
- 介面
SocketException
- 如果在底層協議中存在錯誤,如 TCP 錯誤。getNetworkInterface()
public NetworkInterface getNetworkInterface() throws SocketException
NetworkInterface
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setNetworkInterface(NetworkInterface)
public void setLoopbackMode(boolean disable) throws SocketException
因為此選項是一個提示,所以要驗證回送的設置網要的應用程序應該調用 getLoopbackMode()
disable
- 為 true
表示禁用 LoopbackMode
SocketException
- 如果在設置值時發生錯誤getLoopbackMode()
public boolean getLoopbackMode() throws SocketException
SocketException
- 如果在獲取值時發生錯誤setLoopbackMode(boolean)
@Deprecated public void send(DatagramPacket p, byte ttl) throws IOException
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
- 如果安全管理器存在並且其 checkMulticast
或 checkConnect
方法不允許發送。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。