欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單講解Java的Socket網(wǎng)絡(luò)編程的多播與廣播實現(xiàn)

 更新時間:2016年01月25日 08:50:00   作者:cdai  
這篇文章主要介紹了Java的Socket網(wǎng)絡(luò)編程的多播與廣播實現(xiàn),包括網(wǎng)絡(luò)編程發(fā)送和接受數(shù)據(jù)的一些基礎(chǔ)知識整理,需要的朋友可以參考下

在Java中,我們可以有很多種方法來發(fā)送和接收數(shù)據(jù)。有的方法比較靠近底層,有些問題就需要程序員自己去解決,而有些方法抽象層次比較高,很方便地就可以拿來使用。這些處理數(shù)據(jù)的方法根據(jù)抽象層次由低到高分別有:

1.手動編碼:使用位運算逐個自己編碼和解析。

2.利用流來自動編碼:組合使用OutputStream和ByteArrayOutputStream。

3.序列化:將數(shù)據(jù)放入一個數(shù)據(jù)對象中,直接將這個對象序列化后發(fā)送。
使用起來很方便,但要注意效率的損失,以及接收方也要使用Java。

4.RMI:將對方法的調(diào)用都發(fā)送過去了,直接實現(xiàn)了方法的遠(yuǎn)程調(diào)用。


在最底層的方法1中,我們需要自己解決一些底層的問題:

1.整型的發(fā)送:要考慮是大尾端還是小尾端,是無符號的還是有符號的整數(shù)。

2.字符串的發(fā)送:要考慮編碼問題。

3.無長度限制的類型,如大整數(shù):要編碼成幀F(xiàn)rame,通過定界符或者長度位
來區(qū)分每幀。

多播與廣播

我們可以向每個接受者單播一個數(shù)據(jù)副本,但這樣做效率可能非常低。
只有UDP套接字允許廣播和多播,兩者的區(qū)別是:廣播會發(fā)送到網(wǎng)絡(luò)上所有可達(dá)的
主機,有些操作系統(tǒng)可能不允許普通用戶進(jìn)行廣播操作;而多播只發(fā)送給感興趣的
主機。具體來說是調(diào)用MulticastSocket的joinGroup()加入到多播組的主機。

public class MulticastReceiverTest {

 public static void main(String[] args) throws Exception {
 
 final InetAddress address = InetAddress.getByName("224.1.1.1");
 final int port = 45599;

 for (int i = 0; i < 5; i++) {
  new Thread("Thread #" + i){
  @Override
  public void run() {
   try {
   MulticastSocket sock = new MulticastSocket(port);
   sock.joinGroup(address);
   
   byte[] msg = new byte[256];
   DatagramPacket packet = new DatagramPacket(msg, msg.length);
   
   sock.receive(packet);
   System.out.println(Thread.currentThread().getName() + 
    " receive: " + new String(packet.getData()));
   } 
   catch (IOException e) {
   e.printStackTrace();
   }
  }
  }.start();
 }
 
 Thread.sleep(2000);
 
 MulticastSocket sock = new MulticastSocket();
 sock.setTimeToLive(32);
 
 byte[] msg = "hellomulticast".getBytes();
 DatagramPacket packet = new DatagramPacket(msg, msg.length, address, port);
 
 sock.send(packet);
 System.out.println("Message sent");
 }

}

相關(guān)文章

  • 一文帶你了解RabbitMQ消息轉(zhuǎn)換器

    一文帶你了解RabbitMQ消息轉(zhuǎn)換器

    這篇文章主要為大家詳細(xì)介紹了RabbitMQ中消息轉(zhuǎn)換器的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-04-04
  • SpringBoot整合Shiro的環(huán)境搭建教程

    SpringBoot整合Shiro的環(huán)境搭建教程

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合Shiro的環(huán)境搭建教程,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2022-12-12
  • C++ 程序流程結(jié)構(gòu)詳解

    C++ 程序流程結(jié)構(gòu)詳解

    這篇文章主要介紹了C++程序的程序流程結(jié)構(gòu)以及關(guān)系和邏輯運算符講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2021-09-09
  • SpringBoot2.0集成Swagger2訪問404的解決操作

    SpringBoot2.0集成Swagger2訪問404的解決操作

    這篇文章主要介紹了SpringBoot2.0集成Swagger2訪問404的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Springboot實現(xiàn)密碼的加密解密

    Springboot實現(xiàn)密碼的加密解密

    這篇文章主要為大家詳細(xì)介紹了Springboot實現(xiàn)密碼的加密解密,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 一個簡易的Java多頁面隊列爬蟲程序

    一個簡易的Java多頁面隊列爬蟲程序

    這篇文章主要為大家詳細(xì)介紹了一個多頁面的java爬蟲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • java安全之CommonsCollections4詳解

    java安全之CommonsCollections4詳解

    這篇文章主要介紹了java安全之CommonsCollections4詳解
    2022-08-08
  • Java堆內(nèi)存又溢出了!教你一招必殺技(推薦)

    Java堆內(nèi)存又溢出了!教你一招必殺技(推薦)

    這篇文章主要介紹了Java內(nèi)存溢出問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Jmail發(fā)送郵件工具類分享

    Jmail發(fā)送郵件工具類分享

    這篇文章主要為大家分享了Jmail發(fā)送郵件工具類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java語言中Swing組件編程詳解

    Java語言中Swing組件編程詳解

    這篇文章主要為大家介紹了Java語言中Swing組件編程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評論