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

java点滴之MulticastSocket的使用,布布扣,bubuko.com

时间: 2024-11-10 07:55:11

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

java点滴之volatile关键字特性

一 问题引入 JVM把内存分为两层,一层为大的主存,另外一个是工作内存(属于每个线程自己专属的),正常情况下,线程在用到某个变量的值时,都是先取到工作内存中进行处理,然后再写回主存,这样就会带来不同线程变量值不同步的问题. volatile字面意思是易挥发,不稳定,比如100个线程同时访问修改的一个字段值,那么这种值的特性明显和JVM中高速缓存机制不相符,这种值是不适合放在各线程自己的寄存器中的,那会导致100个线程中持有的副本都不一样. 二volatile修饰符作用 当一个变量被声明成 vol

java点滴之InetAddress类和InetSocketAddress的使用

一简介 InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址: InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象: InetAddress add=InetAddress.getByName("BOPZKQZ9SSY5ECY"); 主机名:BOPZKQZ9SSXXXXX,  ip地址:1XX.1XX.2XX.210 InetSocketAddress是SocketAddress的实现子类. 此类实现 IP 套接字地址(I

java点滴之让Thread的停止执行的方法

1.Thread.yield()方法作用是: 暂停当前正在执行的线程对象,并执行其他线程.   yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会.因此,使用yield()的目的是让相 同优先级的线程之间能适当的轮转执行.但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中.   结论:yield()从未导致线程转到等待/睡眠/阻塞状态.在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能

java点滴之ServerSocket的使用

一概念 serversocket实现了服务端的socket,一个服务端的socket等待从网络上发来的请求,并基于这个请求作出 响应的操作,并作出回应结果. serversocket 建立的是socket的服务端,socket建立的是客户端.最主要构造方法: public ServerSocket():创建一个未绑定任何端口的套接字,通过该方法创建的 ServerSocket 不与任何端口绑定, 接下来还需要通过 bind() 方法与特定端口绑定. 这个默认构造方法的用途是, 允许服务器在绑定到

java点滴之操纵UDP的类:DatagramSocket和DatagramPacket

1.基本概念:   a.DatagramPacket与DatagramSocket位于java.net包中 b.DatagramPacket表示存放数据的数据报,DatagramSocket表示接受或发送数据报的套接字 c.由这两个类所有构成的网络链接是基于UDP协议,是一种不可靠的协议. 2.DatagramSocket基本用法 DatagramSocket类:创建接收和发送UDP的Socket实例 DatagramSocket():创建实例.通常用于客户端编程,它并没有特定监听的端口,仅仅使

java组播MulticastSocket

在单播模式中有服务器端和客户端之分,而组播模式与单播模式不同,每个端都是以路由器或交换机做为中转广播站,任意一端向路由器或交换机发送消息,路由或交换机负责发送其他节点,每个节点都是同等的.所以在编程模式上用同一个类表示即可--MulticastSocket. MulticastSocket属于jdk提供的类,类路径为java.net.MulticastSocket,利用此类可以很方便地实现组播功能,下面展示一个简单例子,两个节点之间通过组播传输消息. ①节点一,指定组播地址为228.0.0.4,

Java点滴一

Java的基础学习已结束,进入第二阶段的Javaoo的学习,开始学习用Java语言实现面向对象的思想,面向对象的开始学习感觉就是蒙蔽状态的开始,学习起来感觉太抽象了,与实际的结合不起来,饶是如此,依旧总结下本周的学习知识点: 基本要点: A:面向对象的类.对象.包 1:类的概念:具有相同属性与行为的对象的集合. 类的建立 Public    class +类名(遵循标识符的规则) 2:什么是对象:万物皆对象. 案例:张三.李四就是一个对象 5:包:主要讲解一个项目工程里面,跨包的调用及调用不同包

java点滴记录1

1.Java中split的用法 Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项: java.lang.string.split split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator,[limit]]) stringObj 必选项.要被分解的 String 对象或文字,该对象不会被split方法修改. separator 可选项.

Java点滴五

本周主要学习内容如下: 一.Java IO流对象 IO流主要用于硬板.内存.键盘等处理设备上得数据操作,根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)1.输入字节流InputStream      InputStream 是所有的输入字节流的父类,它是一个抽象类.       ByteArrayInputStream.StringBufferInputStream.FileInputStr