最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 單播、廣播、組播詳解及實例代碼

 更新時間:2017年02月14日 11:33:52   投稿:lqh  
這篇文章主要介紹了java 單播、廣播、組播詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下

java 單播、廣播、組播詳解及實例代碼

在當前網(wǎng)絡(luò)通信中(TCP/IP也不例外)有三種通信模式:單播、廣播、組播(又叫多播, 個人感覺叫多播描述的有點不恰當),其中多播出現(xiàn)的時間最晚,但同時具備單播和廣播的優(yōu)點,最具有發(fā)展前景。   

一.通信方式分類:   

1.單播:單臺主機與單臺主機之間的通信;   

2.廣播:單臺主機與網(wǎng)絡(luò)中所有主機的通信;   

3.組播:單臺主機與選定的一組主機的通信;        

二.單播:   

單播是網(wǎng)絡(luò)通信中最常見的,網(wǎng)絡(luò)節(jié)點之間的通信 就好像是人們之間的對話一樣。如果一個人對另外一個人說話,   

那么用網(wǎng)絡(luò)技術(shù)的術(shù)語來描述就是“單播”,此時信息的接收和傳遞只在兩個節(jié)點之間進行。   

1. 單播的優(yōu)點:   

(1)服務器以及響應客戶端的請求;   

(2)服務器能針對每個客戶端的不同請求發(fā)送不同的響應,容易顯示個性化服務;   

2. 單播的缺點:   

(1)服務器針對每個客戶機發(fā)送數(shù)據(jù)流,服務器流量=客戶機數(shù)量×客戶機流量;在客戶數(shù)量大、每個客戶機流量大的流媒體應用中服務器不堪重負;   

3. 應用場景:   

單播在網(wǎng)絡(luò)中得到了廣泛的應用,網(wǎng)絡(luò)上絕大部分的數(shù)據(jù)都 是以單播的形式傳輸?shù)?。例如:收發(fā)電子郵件、游覽網(wǎng)頁時,必須與郵件服務器、   

服務器建立連接,此時使用的就是單播通信方式;   

三.廣播:   

“廣播”可以比方為:一個人通過廣播喇叭對在場的全體說話(他才不管你是否樂意聽)。換句話說: 廣播是一臺主機對某一個網(wǎng)絡(luò)上的所有主機發(fā)送數(shù)據(jù)報包。   

這個網(wǎng)絡(luò)可能是網(wǎng)絡(luò),也可能時子網(wǎng),還有可能是所有子網(wǎng)。   

廣播有兩類:本地廣播和定向廣播:   

定向廣播:將數(shù)據(jù)報包發(fā)送到本網(wǎng)絡(luò)之外的特定網(wǎng)絡(luò)的所有主機,然而,由于互聯(lián)網(wǎng)上的大部分路由器都不轉(zhuǎn)發(fā)定向廣播消息,所以這里不深入介紹了  

本地廣播:將數(shù)據(jù)報包發(fā)送到本地網(wǎng)絡(luò)的所有主機,IPv4的本地廣播地址為“255.255.255.255”,路由器不會轉(zhuǎn)發(fā)此廣播;   

1.廣播的優(yōu)點:   

(1)通信的效率高,信息一下子就可以傳遞到某一個網(wǎng)絡(luò)上的所有主機。   

(2)由于服務器不用向每個客戶端單獨發(fā)送數(shù)據(jù),所以服務器流量比較負載低;   

2.廣播的缺點:   

(1)非常占用網(wǎng)絡(luò)的帶寬;   

(2)缺乏針對性,也不管主機是否真的需要接收該數(shù)據(jù), 就強制的接收數(shù)據(jù);   

3.應用場景:   

(1)有線電視就是典型的廣播型網(wǎng)絡(luò)  

四.組播:   

”組播“可以比方為:你對著大街喊:”是男人的來一下,一人發(fā)一百塊”,那么男的過來,女就不會過來,因為沒有錢發(fā)她不理你(組播:其中所有的男生就是一個組),    換句話說: 組播是一臺主機向指定的一組主機發(fā)送數(shù)據(jù)報包,因為如果采用單播方式,逐個節(jié)點傳輸,有多少個目標節(jié)點,就會有多少次傳送過程,這種方式顯然效率 極低,是不可取  的;如果采用不區(qū)分目標、全部發(fā)送的廣播方式,雖然一次可以傳送完數(shù)據(jù),但是顯然達不到區(qū)分特定數(shù)據(jù)接收對象的目的,又會占用網(wǎng)絡(luò)帶寬。采用組播方式,既可以 實現(xiàn)一次傳送所   

有目標節(jié)點的數(shù)據(jù),也可以達到只對特定對象傳送數(shù)據(jù)的目的。   

IP網(wǎng)絡(luò)的組播一般通過組播IP地址來實現(xiàn)。組播IP地址就是D類IP地址,即224.0.0.0至239.255.255.255之間的IP地址。   

1.組播的優(yōu)點:   

(1)具備廣播所具備的所有優(yōu)點;   

(2)與單播相比,提供了發(fā)送數(shù)據(jù)報包的效率,與廣播相比,減少了網(wǎng)絡(luò)流量;   

2.組播的缺點:  

  (1)與單播協(xié)議相比沒有糾錯機制,發(fā)生丟包錯包后難以彌補,但可以通過一定的容錯機制和QOS加以彌補;   

五.應用實例:   

1.UDP單播的例子  

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import java.net.InetSocketAddress; 
import java.net.SocketAddress; 
 
// 客戶端 
public class ClientTest 
{ 
 private static final int MAXRECEIVED = 255; 
 
 public static void main(String[] args) throws IOException 
 { 
  byte[] msg = new String("connect test successfully!!!").getBytes(); 
 
  DatagramSocket client = new DatagramSocket(); 
 
  InetAddress inetAddr = InetAddress.getLocalHost(); 
  SocketAddress socketAddr = new InetSocketAddress(inetAddr, 8888); 
 
  DatagramPacket sendPacket = new DatagramPacket(msg, msg.length, 
    socketAddr); 
 
  client.send(sendPacket); 
 
  client.close(); 
 } 
} 
 
 

服務端:

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.util.Arrays; 
 
//服務端 
public class ServerTest 
{ 
 private static final int MAXREV = 255; 
 
 public static void main(String[] args) throws IOException 
 { 
  DatagramSocket server = new DatagramSocket(8888); 
  DatagramPacket recvPacket = new DatagramPacket(new byte[MAXREV], MAXREV); 
 
  while (true) 
  { 
   server.receive(recvPacket); 
 
   byte[] receiveMsg = Arrays.copyOfRange(recvPacket.getData(), 
     recvPacket.getOffset(), 
     recvPacket.getOffset() + recvPacket.getLength()); 
 
   System.out.println("Handing at client " 
     + recvPacket.getAddress().getHostName() + " ip " 
     + recvPacket.getAddress().getHostAddress()); 
 
   System.out.println("Server Receive Data:" + new String(receiveMsg)); 
 
   server.send(recvPacket); 
 
  } 
 
 } 
} 

2.UDP廣播的例子  

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
 
//客戶端 
public class BroadcastSender 
{ 
 public static void main(String[] args) throws IOException 
 { 
  byte[] msg = new String("connection successfully!!!").getBytes(); 
  /* 
   * 在Java UDP中單播與廣播的代碼是相同的,要實現(xiàn)具有廣播功能的程序只需要使用廣播地址即可, 例如:這里使用了本地的廣播地址 
   */ 
  InetAddress inetAddr = InetAddress.getByName("255.255.255.255"); 
  DatagramSocket client = new DatagramSocket(); 
 
  DatagramPacket sendPack = new DatagramPacket(msg, msg.length, inetAddr, 
    8888); 
 
  client.send(sendPack); 
  System.out.println("Client send msg complete"); 
  client.close(); 
 } 
} 
 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.util.Arrays; 
 
//服務端 
public class BroadcastReceive 
{ 
 public static void main(String[] args) throws IOException 
 { 
 
  DatagramPacket receive = new DatagramPacket(new byte[1024], 1024); 
  DatagramSocket server = new DatagramSocket(8888); 
 
  System.out.println("---------------------------------"); 
  System.out.println("Server current start......"); 
  System.out.println("---------------------------------"); 
 
  while (true) 
  { 
   server.receive(receive); 
 
   byte[] recvByte = Arrays.copyOfRange(receive.getData(), 0, 
     receive.getLength()); 
 
   System.out.println("Server receive msg:" + new String(recvByte)); 
  } 
 
 } 
} 

 3.UDP組播的例子  

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.InetAddress; 
import java.net.MulticastSocket; 
 
//客戶端 
public class MulticastSender 
{ 
 public static void main(String[] args) throws IOException 
 { 
  int port = 8888; 
  byte[] msg = "Connection successfully!!!".getBytes(); 
 
  InetAddress inetRemoteAddr = InetAddress.getByName("224.0.0.5"); 
 
  /* 
   * Java UDP組播應用程序主要通過MulticastSocket實例進行通信,它是DatagramSocket的是一個子類, 
   * 其中包含了一些額外的可以控制多播的屬性. 
   * 
   * 注意: 
   * 
   * 多播數(shù)據(jù)報包實際上可以通過DatagramSocket發(fā)送,只需要簡單地指定一個多播地址。 
   * 我們這里使用MulticastSocket,是因為它具有DatagramSocket沒有的能力 
   */ 
  MulticastSocket client = new MulticastSocket(); 
 
  DatagramPacket sendPack = new DatagramPacket(msg, msg.length, 
    inetRemoteAddr, port); 
 
  client.send(sendPack); 
 
  System.out.println("Client send msg complete"); 
 
  client.close(); 
 
 } 
} 
 
 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.InetAddress; 
import java.net.MulticastSocket; 
import java.util.Arrays; 
 
//服務端 
public class MulticastReceive 
{ 
 public static void main(String[] args) throws IOException 
 { 
  InetAddress inetRemoteAddr = InetAddress.getByName("224.0.0.5"); 
 
  DatagramPacket recvPack = new DatagramPacket(new byte[1024], 1024); 
 
  MulticastSocket server = new MulticastSocket(8888); 
 
  /* 
   * 如果是發(fā)送數(shù)據(jù)報包,可以不加入多播組; 如果是接收數(shù)據(jù)報包,必須加入多播組; 這里是接收數(shù)據(jù)報包,所以必須加入多播組; 
   */ 
  server.joinGroup(inetRemoteAddr); 
 
  System.out.println("---------------------------------"); 
  System.out.println("Server current start......"); 
  System.out.println("---------------------------------"); 
 
  while (true) 
  { 
   server.receive(recvPack); 
 
   byte[] recvByte = Arrays.copyOfRange(recvPack.getData(), 0, 
     recvPack.getLength()); 
 
   System.out.println("Server receive msg:" + new String(recvByte)); 
  } 
 
 } 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java 讀取excel 文件流代碼實例

    Java 讀取excel 文件流代碼實例

    這篇文章主要介紹了Java 讀取excel 文件流代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Springboot集成任務調(diào)度實現(xiàn)過程

    Springboot集成任務調(diào)度實現(xiàn)過程

    這篇文章主要介紹了Springboot集成任務調(diào)度實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • java學習指南之字符串與正則表達式

    java學習指南之字符串與正則表達式

    在日常Java后端開發(fā)過程中,免不了對數(shù)據(jù)字段的解析,自然就少不了對字符串的操作,這其中就包含了正則表達式這一塊的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于java學習指南之字符串與正則表達式的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • spring-data-redis 2.0 的使用示例代碼

    spring-data-redis 2.0 的使用示例代碼

    這篇文章主要介紹了spring-data-redis 2.0 的使用示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法

    spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法

    下面小編就為大家分享一篇spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • SpringBoot最常用的50個注解總結(jié)(全是干貨!)

    SpringBoot最常用的50個注解總結(jié)(全是干貨!)

    SpringBoot提供多種注解簡化配置與啟動流程,如@SpringBootAppication、@RestController、@RequestMapping等,這篇文章主要介紹了SpringBoot最常用的50個注解的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • 詳解Java中Checked Exception與Runtime Exception 的區(qū)別

    詳解Java中Checked Exception與Runtime Exception 的區(qū)別

    這篇文章主要介紹了詳解Java中Checked Exception與Runtime Exception 的區(qū)別的相關(guān)資料,這里提供實例幫助大家學習理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • 教你如何將Springboot項目成功部署到linux服務器

    教你如何將Springboot項目成功部署到linux服務器

    這篇文章主要介紹了如何將Springboot項目成功部署到linux服務器上,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • java實現(xiàn)圖書館管理系統(tǒng)

    java實現(xiàn)圖書館管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • SpringBoot如何使用feign實現(xiàn)遠程接口調(diào)用和錯誤熔斷

    SpringBoot如何使用feign實現(xiàn)遠程接口調(diào)用和錯誤熔斷

    這篇文章主要介紹了SpringBoot如何使用feign實現(xiàn)遠程接口調(diào)用和錯誤熔斷,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12

最新評論

遂平县| 马公市| 凤翔县| 连州市| 南乐县| 冕宁县| 前郭尔| 泗洪县| 浦北县| 龙陵县| 灌阳县| 诸城市| 册亨县| 华亭县| 全南县| 翁牛特旗| 正安县| 东港市| 迁西县| 黄龙县| 镇康县| 巢湖市| 农安县| 兖州市| 朝阳县| 武冈市| 花莲县| 常德市| 通榆县| 厦门市| 保德县| 清涧县| 呈贡县| 平湖市| 大冶市| 玉环县| 天全县| 五莲县| 临沭县| 罗定市| 客服|