国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

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

2019-11-26 14:39:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

1.手動(dòng)編碼:使用位運(yùn)算逐個(gè)自己編碼和解析。

2.利用流來(lái)自動(dòng)編碼:組合使用OutputStream和ByteArrayOutputStream。

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

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


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

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

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

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

多播與廣播

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

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"); }}

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 澎湖县| 吕梁市| 合江县| 鸡西市| 宁都县| 阳高县| 平利县| 黑河市| 昭平县| 利川市| 岗巴县| 西青区| 正安县| 上林县| 阿尔山市| 保德县| 陵川县| 新和县| 济源市| 通化市| 金乡县| 富阳市| 水富县| 章丘市| 徐汇区| 泸溪县| 东光县| 安顺市| 曲阳县| 竹溪县| 龙井市| 宝清县| 耒阳市| 大丰市| 桐乡市| 通山县| 攀枝花市| 东港市| 来凤县| 永嘉县| 岫岩|