DatagramSocket只允許數據報發送給指定的目標地址
若要使用多點廣播時
IP協議為多點廣播提供了這批特殊的IP地址
圖
從圖
MulticastSocket有點像DatagramSocket
MulticastSocket提供了如下三個構造器
public MulticastSocket()
public MulticastSocket(int portNumber)
public MulticastSocket(SocketAddress bindaddr)
創建一個MulticastSocket對象後
joinGroup(InetAddress multicastAddr)
leaveGroup(InetAddress multicastAddr)
在某些系統中
如果創建僅用於發送數據報的MulticastSocket對象
MulticastSocket用於發送
從圖
程序清單
//讓該類實現Runnable接口
public class MulticastSocketTest implements Runnable
{
//使用常量作為本程序的多點廣播IP地址
private static final String BROADCAST_IP
=
//使用常量作為本程序的多點廣播目的的端口
public static final int BROADCAST_PORT =
//定義每個數據報的最大大小為
private static final int DATA_LEN =
//定義本程序的MulticastSocket實例
private MulticastSocket socket = null;
private InetAddress broadcastAddress = null;
private Scanner scan = null;
//定義接收網絡數據的字節數組
byte[] inBuff = new byte[DATA_LEN];
//以指定字節數組創建准備接受數據的DatagramPacket對象
private DatagramPacket inPacket =
new DatagramPacket(inBuff
//定義一個用於發送的DatagramPacket對象
private DatagramPacket outPacket = null;
public void init()throws IOException
{
try
{
//創建用於發送
//因為該MulticastSocket對象需要接收
socket = new MulticastSocket(BROADCAST_PORT)
broadcastAddress = InetAddress
//將該socket加入指定的多點廣播地址
socket
//設置本MulticastSocket發送的數據報被回送到自身
socket
//初始化發送用的DatagramSocket
outPacket = new DatagramPacket(new byte[
broadcastAddress
//啟動以本實例的run()方法作為線程體的線程
new Thread(this)
//創建鍵盤輸入流
scan = new Scanner(System
//不斷讀取鍵盤輸入
while(scan
{
//將鍵盤輸入的一行字符串轉換字節數組
byte[] buff = scan
//設置發送用的DatagramPacket裡的字節數據
outPacket
//發送數據報
socket
}
}
finally
{
socket
}
}
public void run()
{
try
{
while(true)
{
//讀取Socket中的數據
socket
//打印輸出從socket中讀取的內容
System
inPacket
}
}
//捕捉異常
catch (IOException ex)
{
ex
try
{
if (socket != null)
{
//讓該Socket離開該多點IP廣播地址
socket
//關閉該Socket對象
socket
}
System
}
catch (IOException e)
{
e
}
}
}
public static void main(String[] args)
throws IOException
{
new MulticastSocketTest()
}
}
上面程序中init()方法裡的前三行粗體字代碼先創建了一個MulticastSocket對象
返回目錄
編輯推薦
Java程序性能優化
新手學Java
Java程序設計培訓視頻教程
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27258.html