簡單講解Java的Socket網(wǎng)絡(luò)編程的多播與廣播實現(xiàn)
在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)了方法的遠程調(diào)用。
在最底層的方法1中,我們需要自己解決一些底層的問題:
1.整型的發(fā)送:要考慮是大尾端還是小尾端,是無符號的還是有符號的整數(shù)。
2.字符串的發(fā)送:要考慮編碼問題。
3.無長度限制的類型,如大整數(shù):要編碼成幀F(xiàn)rame,通過定界符或者長度位
來區(qū)分每幀。
多播與廣播
我們可以向每個接受者單播一個數(shù)據(jù)副本,但這樣做效率可能非常低。
只有UDP套接字允許廣播和多播,兩者的區(qū)別是:廣播會發(fā)送到網(wǎng)絡(luò)上所有可達的
主機,有些操作系統(tǒng)可能不允許普通用戶進行廣播操作;而多播只發(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");
}
}
- Java 網(wǎng)絡(luò)編程socket編程等詳解
- Java基于Socket實現(xiàn)網(wǎng)絡(luò)編程實例詳解
- Java的Socket網(wǎng)絡(luò)編程基礎(chǔ)知識入門教程
- Java套接字(Socket)網(wǎng)絡(luò)編程入門
- Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實例
- java網(wǎng)絡(luò)編程之socket網(wǎng)絡(luò)編程示例(服務(wù)器端/客戶端)
- Java網(wǎng)絡(luò)編程實現(xiàn)的簡單端口掃描器示例
- Java網(wǎng)絡(luò)編程教程之設(shè)置請求超時的方法
- Java網(wǎng)絡(luò)編程之TCP通信完整代碼示例
- 詳解Java網(wǎng)絡(luò)編程
相關(guān)文章
java Swing JFrame框架類中setDefaultCloseOperation的參數(shù)含義與用法示例
這篇文章主要介紹了java Swing JFrame框架類中setDefaultCloseOperation的參數(shù)含義與用法,結(jié)合實例形式分析了Swing組件的JFrame框架類中setDefaultCloseOperation方法的簡單使用技巧,需要的朋友可以參考下2017-11-11
JAVA發(fā)送HTTP請求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實例代碼
這篇文章主要介紹了JAVA發(fā)送HTTP請求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實例代碼,需要的朋友可以參考下2014-02-02
關(guān)于json解析多層嵌套并轉(zhuǎn)為對應(yīng)類(List)
在進行JSON解析時,遇到多層嵌套結(jié)構(gòu)可通過遞歸或?qū)S脦靵韺崿F(xiàn),重要的是將嵌套的JSON對象準(zhǔn)確轉(zhuǎn)化為對應(yīng)的Java類,通常需要依賴如Gson或Jackson等庫,將JSONObject轉(zhuǎn)為JavaBean時,關(guān)注字段匹配與數(shù)據(jù)類型轉(zhuǎn)換2024-10-10
idea創(chuàng)建spring boot工程及配置文件(最新推薦)
本文給大家介紹idea創(chuàng)建spring boot工程及配置文件,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
JDK動態(tài)代理接口和接口實現(xiàn)類深入詳解
這篇文章主要介紹了JDK動態(tài)代理接口和接口實現(xiàn)類,JDK動態(tài)代理是代理模式的一種實現(xiàn)方式,因為它是基于接口來做代理的,所以也常被稱為接口代理,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06
基于SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決方式
這篇文章主要介紹了SpringBoot應(yīng)用監(jiān)控Actuator安全隱患及解決方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07

