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

簡單講解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á)的
主機(jī),有些操作系統(tǒng)可能不允許普通用戶進(jìn)行廣播操作;而多播只發(fā)送給感興趣的
主機(jī)。具體來說是調(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");
 }

}

相關(guān)文章

最新評論

营口市| 平顺县| 仪征市| 新宾| 涟源市| 沧源| 萨迦县| 元朗区| 东乌珠穆沁旗| 信宜市| 哈巴河县| 伽师县| 分宜县| 新津县| 陕西省| 本溪市| 桐乡市| 南汇区| 长春市| 望奎县| 怀化市| 衡南县| 资中县| 康平县| 房山区| 吕梁市| 石楼县| 滦南县| 崇仁县| 山阳县| 仁寿县| 天台县| 彩票| 东兰县| 商城县| 舟曲县| 尤溪县| 大田县| 涿鹿县| 温州市| 宁远县|