MulticastSocket可以將數據報以廣播的方式發送到多個客戶端。
MulticastSocket有如下3個構造方法
public MulticastSocket():使用本機默認地址,隨機端口來創建MulticastSocket對象。
public MulticastSocket(int portNumber):使用本機默認地址,指定端口創建MulticastSocket對象。
public MulticastSocket(SocketAddress bindaddr):使用本機指定IP地址,指定端口來創建MulticastSocket對象。
創建MulticastSocket對象後,還炫耀將MulticastSocket加入到指定的多點廣播地址,MulticastSocket使用joinGroup()方法加入指定組;使用leaveGroup()方法脫離一個組。
joinGroup(InetAddress addr);
leaveGroup(InetAddress addr);
InetAddress 類沒有提供構造,而提供如下兩個靜態方法來獲取InetAddress對象
getByName(String host):如getByName("localhost"),getByName(www.linuxidc.com);
getByAddress(byte []addr):如getByAddress(new byte[]{127,0,0,1});
MulticastSocket類中有一個setTimeToLive(int ttl),當ttl為0時,指定數據報應停留在本地主機,為1時,指定數據報發送到本地局域網網,為32時,發送到本站點的網絡上。為64時,發送到本地區,128時,發送到本大洲,255為全球。
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.InetAddress;
- import java.net.MulticastSocket;
- import java.util.Scanner;
-
-
- public class Test implements Runnable{
- MulticastSocket socket;
- DatagramPacket rece;
- byte []buffer;
-
- public Test()
- {
- try {
- socket=new MulticastSocket(4800);
- InetAddress addr=InetAddress.getByAddress(new byte[]{(byte)230,0,0,1});
- socket.joinGroup(addr);
- buffer=new byte[4000];
- rece=new DatagramPacket(buffer,4000);
- Thread th=new Thread(this);
- th.start();
- Scanner sc=new Scanner(System.in);
- while(sc.hasNextLine())
- {
- DatagramPacket dp=new DatagramPacket(sc.nextLine().getBytes(),sc.nextLine().getBytes().length,addr,4800);
- socket.send(dp);
- }
-
-
-
-
-
-
-
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- public static void main(String[] args) {
- new Test();
-
- }
-
- @Override
- public void run() {
- while(true)
- {
- try {
- socket.receive(rece);
- System.out.println(new String(buffer));
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
-
- }
-
- }
上面的代碼能運行,貌似有點問題,不過還是可以通訊,有時間在好好做一做,先做到這裡。