歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java使用MulticastSocket實現多點廣播

Java使用MulticastSocket實現多點廣播

日期:2017/3/1 10:10:14   编辑:Linux編程

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. public class Test implements Runnable{
  7. MulticastSocket socket;
  8. DatagramPacket rece;
  9. byte []buffer;
  10. public Test()
  11. {
  12. try {
  13. socket=new MulticastSocket(4800);
  14. InetAddress addr=InetAddress.getByAddress(new byte[]{(byte)230,0,0,1});
  15. socket.joinGroup(addr);
  16. buffer=new byte[4000];
  17. rece=new DatagramPacket(buffer,4000);
  18. Thread th=new Thread(this);
  19. th.start();
  20. Scanner sc=new Scanner(System.in);
  21. while(sc.hasNextLine())
  22. {
  23. DatagramPacket dp=new DatagramPacket(sc.nextLine().getBytes(),sc.nextLine().getBytes().length,addr,4800);
  24. socket.send(dp);
  25. }
  26. } catch (Exception e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. }
  30. }
  31. public static void main(String[] args) {
  32. new Test();
  33. }
  34. @Override
  35. public void run() {
  36. while(true)
  37. {
  38. try {
  39. socket.receive(rece);
  40. System.out.println(new String(buffer));
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. }

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

Copyright © Linux教程網 All Rights Reserved