-
Java连载129-广播数据包、网络编程总结
一、广播数据包
1.特性
- 这种通信类似于广播,要想实现这个功能,需要使用特殊的IP地址,要想实现多播或者广播通信的主机必须加入一个D类地址,D类地址的十进制表示范围为224.0.0.0~239.255.255.255
- 需要使用的类是`java.net.MulticastSocket.
-
常用的构建方法
(1)MulticastSocket(int port) throws IOException
创建一个多播套接字,并将其绑定到端口上。
(2)MuticastSocket(SocketAddress bindaddr) throws IOException
创建一个多播套接字,并将其绑定到一个指定套接字地址上。\ -
常用的成员方法:
(1)public void joinGroup(InetAddress mcastaddr)
将多播套接字加入指定多播组。
(2)public void leaveGroup(InetAddress mcastaddr)
将多播套接字移出多播组。
(3)public void setTimeToLive(int ttl) throws IOException
设置在此MuticastSocket上发出的多播数据包的默认生存时间。\ -
ttl参数设置数据包最多可以跨过多少个网络:
(1)ttl=0,数据包应该停留在本地主机;
(2)ttl=1,数据包应该发送到本地局域网;
(3)ttl=32,数据包应该发送到本站点的网络上;
(4)ttl=64,数据包应该保留在本地区;
(5)ttl=128,数据包应该保留在本大洲;
(6)ttl=255,数据包应该可以发送到所有地方。\ - 先写一个发送端
package com.bjpowernode.java_learning; import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class D129_1_BroadcastTest { public static void main(String[] args) { new D129_Broadcast().send(); } } class D129_Broadcast { public void send() { String msg = "Hello,This is Broadcast Message"; //多播内容 int port = 6666; InetAddress group = null; MulticastSocket ms = null; try { group = InetAddress.getByName("224.1.1.1"); //创建多播地址 ms = new MulticastSocket(port); //创建多播套接字 ms.joinGroup(group); //将套接字加入多播地址 ms.setTimeToLive(1); //设置数据报发送范围为本地 DatagramPacket dp = new DatagramPacket(msg.getBytes(),msg.length(),group,port);//创建待发送的数据报 ms.send(dp); //发送数据报 }catch(IOException e) { System.out.println(e); }finally { ms.close(); //关闭套接字 } } }
- 再写一个接收端的程序
package com.bjpowernode.java_learning; import java.net.DatagramPacket; public class D129_2_ReceiverTest { public static void main(String[] args) { new D129Receiver().receive(); } } class D129Receiver{ public void receive() { byte[] data = new byte[1024]; //数据缓存区 int port = 6666; //多播端口号 InetAddress group = null; MuticastSocket ms = null; try { group = InetAddress.getName("224.1.1.1"); //创建多播地址 ms = new MulticastSocket(port); //创建多播套接字 ms.joinGroup(group); //将套接字加入到多播地址 DatagramPacket dp = new DatagramPacket(data,data,length,group,port); //创建待接收的数据报 ms.receive(dp); //接收数据报 String msg = new String(dp.getData(),0,dp.getLength()); System.out.println("接收到的数据广播数据为:"+msg); }catch(IOException e) { System.out.println(e); }finally { ms.close(); //关闭套接字 } } }
- 首先是运行接收端,然后运行广播端,广播将发送“Hello,This is Broadcast Message",客户端收到该消息后会将其打印出来。
总结:
(1)TCP和UDP之间的区别有哪些? TCP是面向连接的流传输控制协议,具有高可靠性,确保传输数据的正确性,有验证重发机制,保证传输过去的数据不会出现丢失或者乱序的情况。
UDP是无连接的数据服务,不对数据的完整性进行检查与修改,无需等待对方应答,会出现分组丢失,重复,乱序的情况,但传输效率高,实时性很好,适用于局域网内部传输。报文协议头简单。
(2)Socket的网络编程过程简述
首先是客户端,首先创建一个Socket实例,利用构造方法,绑定要通信的地址和端口,然后通过套接字的I/O流进行通信,最后通信接收,调用成员方法close()来关闭Socket;
然后是服务器端,首先建立一个ServerSocket实例,并使用构造方法来绑定本地IP地址以及端口号,用于监听将会收到的TCP请求。然后做如下循环:调用成员方法accept()来获取客户端的连接,并且返回一个Socekt实例。为返回的Socket实例创建一个线程,并且使用返回的Socket实力的I\O流与客户端通信;最后使用成员方法进行关闭。
三、源码:
-
- D129_1_BroadcastTest.java
- D129_2_ReceiverTest.java
- https://github.com/ruigege66/Java/blob/master/D129_1_BroadcastTest.java
- https://github.com/ruigege66/Java/blob/master/D129_2_ReceiverTest.java
- 出 处:https://www.cnblogs.com/ruigege0000/p/13289449.html
最新更新
带有参数的装饰器
类装饰器
django中的auth模块与admin后台管理
python的日期处理
字符串常用方法
基本数据类型概述
python-map()函数基本用法
python带你实现任意下载AcFun视频数据~
bbs项目之注册功能
变量的定义和使用
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型
TypeScript(2)WebStorm自动编译TypeScript配置