当前课程知识点:JAVA程序设计进阶 > 第五章 网络编程(下) > 5.3 使用数据报进行广播通信 > Video
这一节我们将介绍
如何使用数据报
来进行广播通讯的原理和方式
那利用数据报包呢
我们也可以进行这个广播通讯
当然广播你可能也不能说
做一个大范围的广播
在一个小范围的局域网里面
你做广播还是有可能的
那怎么做广播呢
原来DatagramSocket的话
它只是允许数据报放一个目的地址
但如果我们用MulticastSocket的话这类
它可以把数据报以广播的方式
发送到所有监听的该端口的客户
所以我们就利用MulticastSocket
在客户端来监听广播
就是服务器广播出来的这个数据
下面我们看一个例子
我们这个例子叫MulticastClient.java
然后我们看一下它的主方法
主方法里面的第一行
就是MulticastSocket socket new MulticastSocket(4446)
首先构造一个广播Socket对象
然后里面一定要指明这个端口号4446
这时候我们又定义了
一个互联网的地址对象InetAddress
然后对象名字叫address
构造它的时候给了它一个
这个IP地址230.0.0.1
好 这时候我们把Socket下面构造的
广播Socpet对象joimGroup (address)
也就是说我们这广播对象
我们加入一个组
加入了哪个组呢
就是由这个地址InetAddress这个
address这个对象所标识的这个组
然后DatagramPacket packet
这是我们马上要构造的
一个数据报包的对象
那下面的话
我们要站在客户端的角度
就是要接收广播信息了
循环五遍for int i=0
i小于5 i++
然后定义了一个这个字节数组buf
它的这个长度是256
这时候我们构造一个数据报包
new DatagramPacket
它所对应的对象是buf和 buf.length
然后这个时候我们通过socket
它的received方法
接收到这个广播下来的
这个数据报包
接收到了以后
我们就要读取它这些信息啦
那怎么读呢
那就通过packet.getData的方法
得到它的信息
并把它转换成一个字符串
然后复制给receive
然后紧接着给打印出来
Quote of theMoment received
就那个时刻的时候的
这些股票这个信息是什么
循环五次接收完了以后
我们就socket.leaveGroup(address)
也就说我们这广播用的这个socket的话
我们就离开我们所关注的那个组
然后最后socket进行关闭
这个是我们的客户端
那我们看一下
如果做这个广播的服务端呢
我们看一下这个类
public class MulticastServer
主方法里面就是new MulticastServerThread.start
那我们看
MulticastServerThread
它到底什么内容
它extends QuoteServerThread
继承了QuoteServerThread这个类
那我们看一下
这里面定义的成员这个变量
private long FIVE-SECOND=5000
然后它的构造方法里面
就是调用了副类的各个方法
那我们看一下它的run方法
public void run
run方法里面是这样
while(moreQuotes)
还有更多的这些股票信息化
try buf
buf=new byte256
也就是byte buf=new byte等于256
那我构造一个字节数组
然后下面的话
我需要把从我的那个股票的文件中
把这股票信息读出来
那就我构造一个string对象dstring
然后呢如果能读出来
就通过getNextQuote方法
把这股票信息读出来复制给dstring
如果股票信息读完了
那就我把当前日期
那个复制给我们这个dstring对象
紧接着把dstring通过它的byte方法
转换成一个字节数组buf
这时候我们再往下我们就构造
这么一个一个这个组了
就InetAddress group
=InetAddress.getByName(230.0.0.1)
构造了这么一个
要用于广播的这么一个地址
然后呢我们看一下
接着往下要往外广播的
数据报包是怎么构造的
那就Datagrampacket packet=new Datagrampacket
然后前两个参数分别是我们的
要发送的内容以及长度
就是我们的字节数组buf以及buf.length
那要发到哪个目标地址呢
那就是上面的group端口号是4446
那我们通过我们的这个socket把它send出去
把它发送出去
发送的对象就是packet
那每发送一次下面就要sleep
休眠一段时间 多长
0到5秒 休眠这段时间
最后的话
我们把那个moreQuotes作为false
因为这所有都读完了
然后最后的话把这个socket给关闭掉
最后关闭掉
那这个例子
大家在自己程序上运行的时候
注意你肯定需要先运行客户端
而不是运行服务端
就是说先运行客户端后运行服务端
因为这时候我们是广播
是通过服务器往客户端广播
所以客户端先得竖起耳朵
你才能够听到服务端
广播来的那个信息
那就是建议大家
尝试运行的时候可以拿
先拿两个虚拟机
每一个虚拟机
JAVA虚拟机
各自运行一个Client这个程序
然后再拿第三个虚拟机
去运行server程序
那在server程序运行过程当中
这前面两个运行的Client程序
就会大概在0到5秒之间
就会收到一次
服务端广播过来的股票信息
那总共server端
会循环大概五次左右
直到它的这个服务端的
这股票信息都已经广播完毕了
在这一节
我们通过一个例子介绍了
如何使用数据报来实现广播的机制
-1.0 导学
--Video
-1.1 线程的基本概念
--Video
-1.1 线程的基本概念--作业
-1.2 通过Thread类创建线程
--Video
-1.2 通过Thread类创建线程--作业
-1.3 线程的休眠
--Video
-1.3 线程的休眠--作业
-1.4 Thread类详解
--Video
-1.5 通过Runnable接口创建线程
--Video
-1.5 通过Runnable接口创建线程--作业
-1.6 线程内部的数据共享
--Video
-2.0 导学
--Video
-2.1 线程同步的思路
--Video
-2.2 线程同步的实现方式—Synchronization
--Video
-2.3 线程的等待与唤醒
--Video
-2.4 后台进程
--Video
-2.5 线程的生命周期与死锁
--Video
-2.6 线程的调度
--Video
-3.0 导学
--Video
-3.1 线程安全与线程兼容与对立
--Video
-3.2 线程的安全实现-互斥同步
--Video
-3.3 线程的安全实现-非阻塞同步
--Video
-3.4 线程的安全实现-无同步方案
--Video
-3.5 锁优化
--Video
-4.0 导学
--Video
-4.1 URL对象
--Video
-4.2 URLConnection对象
--Video
-4.3 Get请求与Post请求
--Video
-4.4 Socket通信原理
--Video
-4.5 Socket通信实现
--Video
-5.0 导学
--Video
-5.1 Socket 多客户端通信实现
--Video
-5.2 数据报通信
--Video
-5.3 使用数据报进行广播通信
--Video
-5.4 网络聊天程序
--Video
-6.0 导学
--Video
-6.1 Java虚拟机概念
--Video
-6.2 Java虚拟机内存划分
--Video
-6.3 Java虚拟机类加载机制
--Video
-6.4 判断对象是否存活算法及对象引用
--Video
-6.5 分代垃圾回收
--Video
-6.6 典型的垃圾收集算法
--Video
-6.7典型的垃圾收集器
--Video
-7.0 导学
--Video
-7.1 集合框架与ArrayList
--Video
-7.2 LinkedList
--Video
-7.3 HashMap与HashTable
--Video
-7.4 TreeMap与LinkedHashMap
--Video
-7.5 HashSet
--Video
-8.0 导学
--Video
-8.1 Java反射机制
--Video
-8.2 Java静态代理
--Video
-8.3 Java动态代理
--Video
-8.4 Java 反射扩展-jvm加载类原理
--Video
-8.5 Java进阶课程总结
--Video