java點滴之MulticastSocket的使用


一基本概念

該類恰是上文介紹的DatagramSocket的子類。

DatagramSocket僅僅同意數據報發送給指定的目標地址,而MulticastSocket能夠將數據報以廣播的方式發送到多個client 

若要使用多點廣播,則須要讓一個數據報標有一組目標主機地址,當數據報發出后,整個組的全部全部主機都能收到該數據報。IP多點廣播(或多點發送)實現了將單一信息發送到多個接受者的廣播,其思想是設置一組特殊網絡地址作為多點廣播地址,每個多點廣播地址都被看做一個組,當client須要發送、接收廣播信息時,增加到改組就可以。

MulticastSocket既能夠將數據報發送到多點廣播地址,也能夠接收其它主機的廣播信息。


作為子類,最大的擴展就是它提供方法:
1.joinGroup(InetAddress mcastaddr)
2.joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
3.leaveGroup(InetAddress mcastaddr)
4.leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
5.get/setInterface(InetAddress inf)
6. get/setNetworkInterface(NetworkInterface netIf)

注:
NetworkInterface 網絡接口類
什么是網絡接口:網絡接口名並非計算機名,而是用於標識物理或邏輯網絡接口的名字,通常是由操作系統設置的。網絡接口名在大多數操作系統上(包含Windows、Linux和Unix)是以eth開頭,后面是網絡接口的索引號,從0開始。如本機安了三塊網卡,那么網絡接口名就依次是eth0、eth1和eth2。每一個網絡接口都能夠綁定一個ip地址,也能夠據此得到設備的MAC地址。
方法:1. Enumeration<InetAddress> getInetAddresses():一個 Enumeration 對象,具有綁定到此網絡接口的所有或部分 InetAddress

二 方法簡單介紹

 創建MulticastSocket對象后,還須要將該MulticastSocket增加到指定的多點廣播地址,MulticastSocket使用joinGroup()方法增加指定組;使用leaveGroup()方法脫離一個組。

1、joinGroup(InetAddress multicastAddr):將該MulticastSocket增加指定的多點廣播地址。

2、leaveGroup(InetAddress multicastAddr):讓該MulticastSocket離開指定的多點廣播地址。


應用程序僅僅將數據報包發送給組播地址,路由器將確保包被發送到改組播組中的全部主機。 
組播地址:稱為組播組的一組主機所共享的地址。組播地址的范圍在224.0.0.0--- 239.255.255.255之間(都為D類地址 1110開頭)。 
備注:假設如今有三台機器A、B、C,三台機器IP地址都不一樣,A\B為server監聽廣播消息,C為client發送廣播消息,個人理解是將A、B兩台機器的MulticastSocket對象綁定在組播地址中的當中一個,然后Cclient發送消息的組播地址一致,則A、B就行接收C發送的消息。 
假設MulticastSocket用於接收信息則使用默認地址和隨機port就可以,可是假設用來接收信息,則必需要指定port,否則發送方無法確定發送數據報的目標port。

三代碼演示樣例

MulticastSocket _socket = new MulticastSocket(5353);
        InetSocketAddress sockaddr = new InetSocketAddress(224.0.0.251, 5353);
        
            try {
                _socket.setNetworkInterface(hostInfo.getInterface());
                _socket.joinGroup(sockaddr, hostInfo.getInterface());
            } catch (SocketException e) {
                DLog.w(TAG, TAGClass + "openMulticastSocket() Set network interface exception: "
                        + e.getMessage());
            }
        }
        _socket.setTimeToLive(255);






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM