一基本概念

该类恰是上文介绍的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);

java点滴之MulticastSocket的使用的更多相关文章

  1. java组播MulticastSocket

    在单播模式中有服务器端和客户端之分,而组播模式与单播模式不同,每个端都是以路由器或交换机做为中转广播站,任意一端向路由器或交换机发送消息,路由或交换机负责发送其他节点,每个节点都是同等的.所以在编程模 ...

  2. Java点滴之Java概述

    写在前面的话 2017年对我来说真是多灾多难的一年,在这过去的一年里发生的种种不幸,促使我下定决心一切要重新开始.在去年的夏天从公司裸辞后,来到了一个陌生的城市开启了新的求职历程,万万没想到的是,求职 ...

  3. Java点滴之类与对象

    类的概述 Java是一门纯粹的面向对象(OOP)语言,面向对象程序是由多个对象所组成的,而对象的创建又必须依赖于类,那么什么又是类呢?在现实世界中,我们常常将多个具有相同或相似特征的对象分为一类,并冠 ...

  4. Java点滴-List<Integer> list; 中尖括号的意思

    这是jdk1.5后版本才有的新特性,泛型,指定传入的类型.这样定义之后,这个list只能接收Integer的对象. 以前没有加这个,传入的都是Object类型的,取出来的时候要强制类型转换为自己想要的 ...

  5. Android开发:组播(多播)与广播

    近期由于需要编写能够使同一局域网中的Android客户端与PC端进行自动匹配通信功能的程序,学习并试验了JAVA组播与广播的内容,记录一些理解如下: 一.组播(多播) 背景知识:组播使用UDP对一定范 ...

  6. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  7. java之DatagramSocket、DatagramPackage丶MulticastSocket 广播学习

    1.基本概念: a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送 ...

  8. 关于java MulticastSocket中的joinGroup(SocketAddress mcastAddr,NetworkInterface netif)

    今天复习了一下java网络编程这方面(其实是之前没有学好),之前在linux下用c来做过一些例子,不过不好久没有用也就忘得一干二净了.不知道c/c++的东西不太好记,还是当初没好好学. 关于组播这方面 ...

  9. java.net.MulticastSocket Example--reference

    In this example we are going to explain how to use MulticastSocket in Java, in order to enable a ser ...

随机推荐

  1. CF961F k-substrings

    题意 给定一个字符串 \(S\) 求所有的 \(S[i,n-i+1]\) 的 \(border\) 长度(最长的前缀等于后缀),要求长度是奇数 \(n\le 10^6\) Sol 首先发现每次求的串都 ...

  2. 使用postMessage通信,未触发message事件

    前提: 父子页面跨域通信,使用postMessage技术 a页面为父页面,b页面为子页面 a中包含多个iframe,部分域名是相同的,目录层级不一致,地址使用变量根据触发的条件不同拼接地址 部分代码( ...

  3. 移动端H5开发 之 渲染引擎

    渲染引擎 浏览器渲染引擎,负责解析 HTML, CSS,javascript的DOM部分,如桌面浏览器一般手机端也有4个比较重要的渲染引擎 Gecko,Trident,WebKit,Blink . 黑 ...

  4. Hive、Spark SQL、Impala比较

    Hive.Spark SQL.Impala比较        Hive.Spark SQL和Impala三种分布式SQL查询引擎都是SQL-on-Hadoop解决方案,但又各有特点.前面已经讨论了Hi ...

  5. 然之协同系统6.4.1 SQL注入之exp编写

    前言 前面已经说明了 漏洞成因,这里介绍一下 exp 的编写. 正文 为了 getshell 或者是 任意文件下载, 我们需要修改 数据库中的 前缀sys_file 表, 所以我们的利用方式如下 使用 ...

  6. maven(17)-自动发布到远程linux服务器

     发布方式 手工方式:需要做一系列的工作,包括打WAR包,上传到服务器,重启服务器,删除旧文件等 自动方式:一条命令完成以上所有过程 服务器环境 centos7.3和tomcat8,关于cento ...

  7. JavaScript的本地对象、内置对象、宿主对象

    首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...

  8. 开闭原则(OCP)

    开闭原则具有理想主义的色彩,它是面向对象设计的终极目标.因此,针对开闭原则的实现方法,一直都有面向对象设计的大师费尽心机,研究开闭原则的实现方式.后面要提到的里氏代换原则(LSP).依赖倒转原则(DI ...

  9. Spring Boot 的配置文件

    Profile 配置 Profile 是 Spring 用来针对不同的环境对不同的配置提供支持的,全局的 Profile 配置使用 application-{profile}.properties ( ...

  10. window下使用SetUnhandledExceptionFilter捕获让程序的崩溃(转)

    简单使用SetUnhandledExceptionFilter()函数让程序优雅崩溃 虽然是大公司的产品,QQ它还是会在我们的折腾下崩溃的,但是它总是崩溃的很优雅,还要弹出自己的对话框来结束.并且发送 ...