国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java使用MulticastSocket實現多點廣播

java使用MulticastSocket實現多點廣播

2021-06-28 09:50liuke0002 Java教程

這篇文章主要為大家詳細介紹了java使用MulticastSocket實現多點廣播,具有一定的參考價值,感興趣的小伙伴們可以參考一下

datagramsocket只允許數據報發送給指定的目標地址,而multicastsocket可以將數據報以廣播方式發送到數量不等的多個客戶端。

若要使用多點廣播時,則需要讓一個數據報標有一組目標主機地址,當數據報發出后,整個組的所有主機都能收到該數據報。ip多點廣播實現了將單一信息發送到多個接收者的廣播,其思想是設置一組特殊網絡地址作為廣播地址,每個多點廣播地址都被看做一個組,當客戶端主要發送、接收信息時,加入到該組即可。

ip協議為多點廣播提供了這批特殊的ip地址,這些地址的ip地址范圍是224.0.0.0至239.255.255.255。

java使用MulticastSocket實現多點廣播

通過java實現多點廣播時,multicastsocket類是實現這一功能的關鍵,當multicastsocket把一個datagrampacket發送到多點廣播的ip地址,該數據報將被自動廣播到加入該地址的所有multicastsocket類既可以發送數據報到多點廣播地址,也可以接受其他主機的廣播信息。

multicastsocket有點像datagramsocket,事實上multicastsocket是特殊的datagramsocket。若要發送一個數據報時,可使用隨機端口段間multicastsocket,也可以指定端口來創建multicastsocket。

multicastsocket提供了如下三個構造器

public multicastsocket():使用本機默認地址、隨機端口來創建一個multicastsocket對象。
public multicastsocket(int number):使用本機默認地址、指定端口來創建一個multicastsocket對象。
public multicastsocket(socketaddress bindaddr):使用本機指定ip地址、指定端口來創建一個multicastsocket對象。

創建一個multicastsocket對象后,還需要將該multicastsocket加入到指定的多點廣播地址,multicastsocket使用joingroup()方法來加入指定組;使用leavegroup()方法脫離一個組。

joingroup(inetaddress multicastaddr):將該multicastsocket加入指定的多點廣播地址
leavegroup(inetaddress multicastaddr):讓該multicastsocket離開指定的多點廣播地址。

在某些系統中,可能有多個網絡接口。這可能會對多點廣播帶來問題,這時候程序需要在一個指定的網絡接口上監聽,通過調用setinterface可選擇multicastsocket所使用的網絡接口;頁可以使用getinterface方法查詢multicastsocket監聽的網絡接口。

如果創建僅用于發送數據報的multicastsocket對象,則使用默認地址、隨機端口即可。但如果創建接收用的multicastsocket對象,則該multicastsocket對象必須有指定端口,否則發送方無法確定發送的數據報的目標端口。

multicastsocket用于發送,接收數據報的方法與datagramsocket的完全一樣。但multicastsocket比datagramsocket多一個settimetolive(int ttl)的方法,該ttl參數設置數據報最多可以跨過幾個網絡,當ttl為0時,指定數據報應停留在本地主機;當ttl的值為1時,指定數據報發送到本地局域網;當ttl的值為32時,意味著只能發送到本站點的網絡上;當ttl為64時,意味著數據報應保留在本地區。當ttl為128時,意味著數據報應保留在本大洲。當ttl為255時,意味著數據報可發送到所有地方。默認情況下,該ttl的值為1。

使用multicastsocket進行多點廣播時所有通信實體都是平等的,他們都將自己的數據報發送到多點廣播ip地址,并使用multicastsocket接收其他人發送的廣播數據報。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import java.io.ioexception;
import java.net.datagrampacket;
import java.net.inetaddress;
import java.net.multicastsocket;
import java.util.scanner;
 
//讓該類實現runnable接口,該類的實例可作為線程的target
public class test implements runnable {
 // 使用常量作為本程序的多點廣播ip地址
 private static final string broadcast_ip = "230.0.0.1";
 // 使用常量作為本程序的多點廣播目的的端口
 public static final int broadcast_port = 30000;
 // 定義每個數據報的最大大小為4k
 private static final int data_len = 4096;
 // 定義本程序的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, inbuff.length);
 // 定義一個用于發送的datagrampacket對象
 private datagrampacket outpacket = null;
 
 public void init() throws ioexception {
 try {
  // 創建用于發送、接收數據的multicastsocket對象
  // 因為該multicastsocket對象需要接收,所以有指定端口
  socket = new multicastsocket(broadcast_port);
  broadcastaddress = inetaddress.getbyname(broadcast_ip);
  // 將該socket加入指定的多點廣播地址
  socket.joingroup(broadcastaddress);
  // 設置本multicastsocket發送的數據報被回送到自身
  socket.setloopbackmode(false);
  // 初始化發送用的datagramsocket,它包含一個長度為0的字節數組
  outpacket = new datagrampacket(new byte[0], 0, broadcastaddress, broadcast_port);
  // 啟動以本實例的run()方法作為線程體的線程
  new thread(this).start();
  // 創建鍵盤輸入流
  scan = new scanner(system.in);
  // 不斷讀取鍵盤輸入
  while (scan.hasnextline()) {
  // 將鍵盤輸入的一行字符串轉換字節數組
  byte[] buff = scan.nextline().getbytes();
  // 設置發送用的datagrampacket里的字節數據
  outpacket.setdata(buff);
  // 發送數據報
  socket.send(outpacket);
  }
 } finally {
  socket.close();
 }
 }
 
 public void run() {
 try {
  while (true) {
  // 讀取socket中的數據,讀到的數據放在inpacket所封裝的字節數組里。
  socket.receive(inpacket);
  // 打印輸出從socket中讀取的內容
  system.out.println("聊天信息:" + new string(inbuff, 0, inpacket.getlength()));
  }
 }
 // 捕捉異常
 catch (ioexception ex) {
  ex.printstacktrace();
  try {
  if (socket != null) {
   // 讓該socket離開該多點ip廣播地址
   socket.leavegroup(broadcastaddress);
   // 關閉該socket對象
   socket.close();
  }
  system.exit(1);
  } catch (ioexception e) {
  e.printstacktrace();
  }
 }
 }
 
 public static void main(string[] args) throws ioexception {
 new test().init();
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/u014142287/article/details/53438650

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品久久国产字幕高潮 | 成人午夜毛片 | 亚洲一区二区三区在线播放 | 99爱精品在线| 国产黄色在线播放 | 欧美一区二区在线观看视频 | 精品免费国产一区二区三区四区 | 精品一区二区在线观看 | 国产精品爱久久久久久久 | 免费看毛片的网站 | 久久69精品久久久久久国产越南 | 色爱av| 午夜精品久久久久久久 | 三级黄色片在线观看 | 亚洲综合视频 | 日韩在线免费 | 久草青青草 | 欧美综合色 | 亚洲国产精品久久人人爱 | 深夜免费网站 | 中文字幕99 | 男人的天堂午夜 | 91精品国产一区二区三区 | 精品视频久久 | 免费av电影观看 | 欧美黄色精品 | 国产成人精品久久二区二区91 | 欧美成年网站 | 国产一区二区在线免费观看 | 国产精品久久久久久久久久久久冷 | 毛片91 | 欧美日本国产一区 | 亚洲一区二区三区免费观看 | 国产精品中文字幕在线观看 | 久久久高清 | 国产一区二区三区在线 | 欧美狠狠操 | 精品一区二区在线观看 | 成人在线免费观看小视频 | 91精品国产综合久久福利软件 | 欧美日韩国产高清 |