簡單講解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)了方法的遠(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"); } }
- 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)文章
SpringBoot整合Shiro的環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了SpringBoot整合Shiro的環(huán)境搭建教程,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以了解一下2022-12-12SpringBoot2.0集成Swagger2訪問404的解決操作
這篇文章主要介紹了SpringBoot2.0集成Swagger2訪問404的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09