歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java使用MulticastSocket實現多點廣播

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為全球。

  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.InetAddress;  
  4. import java.net.MulticastSocket;  
  5. import java.util.Scanner;  
  6.   
  7.   
  8. public class Test implements Runnable{  
  9.     MulticastSocket socket;  
  10.     DatagramPacket rece;  
  11.     byte []buffer;  
  12.       
  13.     public Test()  
  14.     {  
  15.         try {  
  16.             socket=new MulticastSocket(4800);  
  17.             InetAddress addr=InetAddress.getByAddress(new byte[]{(byte)230,0,0,1});  
  18.             socket.joinGroup(addr);  
  19.             buffer=new byte[4000];  
  20.             rece=new DatagramPacket(buffer,4000);  
  21.             Thread th=new Thread(this);  
  22.             th.start();  
  23.             Scanner sc=new Scanner(System.in);  
  24.             while(sc.hasNextLine())  
  25.             {  
  26.                 DatagramPacket dp=new DatagramPacket(sc.nextLine().getBytes(),sc.nextLine().getBytes().length,addr,4800);  
  27.                 socket.send(dp);  
  28.             }  
  29.               
  30.               
  31.               
  32.               
  33.               
  34.               
  35.               
  36.               
  37.         } catch (Exception e) {  
  38.             // TODO Auto-generated catch block   
  39.             e.printStackTrace();  
  40.         }  
  41.     }  
  42.       
  43.     public static void main(String[] args) {  
  44.         new Test();  
  45.           
  46.     }  
  47.   
  48.     @Override  
  49.     public void run() {  
  50.         while(true)  
  51.         {  
  52.             try {  
  53.                 socket.receive(rece);  
  54.                 System.out.println(new String(buffer));  
  55.             } catch (IOException e) {  
  56.                 e.printStackTrace();  
  57.             }  
  58.               
  59.         }  
  60.           
  61.     }  
  62.   
  63. }  

上面的代碼能運行,貌似有點問題,不過還是可以通訊,有時間在好好做一做,先做到這裡。

Copyright © Linux教程網 All Rights Reserved