zoukankan      html  css  js  c++  java
  • 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地址都不一样,AB为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);





  • 相关阅读:
    Java网络编程:OSI七层模型和TCP/IP模型介绍
    Java网络编程:IP地址和端口号
    Java缓冲流的优点和原理
    Java线程的优先级设置遵循什么原则?
    java笔试题大全带答案(经典11题)
    java笔试题大全之IO流常见选择题
    java笔试手写算法面试题大全含答案
    java笔试常见的选择题
    Java的类加载器都有哪些,每个类加载器都有加载那些类,什么是双亲委派模型,是做什么的?
    Java的安全性如何理解
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3758308.html
Copyright © 2011-2022 走看看