1 、UDP(User Datagram Protocol)用户数据包传输协议
1.1 特点:
- 效率高
- 不安全
- 易造成数据丢失
1.2 方式:
- 单播:一对一
- 广播:一对多
- 组播:多对多
2. Socket 套接字技术
2.1 特点:
- 效率低
- 每次都需要建立连接
- 耗费时间
- 安全性高
3. UDP案例
3.1 案例一:单播
3.1.1 接收者
1 定义接收信息的人
2 定义byte数组用来接收信息
3.定义接收信息的数据包
4.开始接收
5.将接收的字节数组转换字符串
6.关闭资源
System.out.println("小可爱上线~,等待发送!");
//定义接收信息的人
DatagramSocket ds = new DatagramSocket(3838);
//定义byte数组用来接收信息
byte[] bs = new byte[30];
//定义接收信息的数据包
DatagramPacket dp = new DatagramPacket(bs, bs.length);
//开始接收
ds.receive(dp);
//将接收的字节数组转换字符串
String str = new String(bs);
//去除空格
str.trim();
//获取系统时间
System.out.println(new Date().toLocaleString());
System.out.println("接收的信息是:" + str);
//关闭资源
ds.close();
3.1.2 发送者
1 定义发送信息
2.定义发送对象
3.打包
4.开始发送
//定义发送信息
String str = "一个来自哈哈星的快递";
//定义发送对象
DatagramSocket ds = new DatagramSocket();
//打包
DatagramPacket dp;
dp = new DatagramPacket(str.getBytes(),
str.getBytes().length,
InetAddress.getByName("127.0.0.1"), 3838);
//开始发送
ds.send(dp);
ds.close();
System.out.println("发送完成!");
3.2 案例二:发送文件
3.2.1 发送方
1.定义发送信息的人
2.定义字节数组
3.定义空数据包
4.定义要发送文件的对象
5.定义字节读取流
6.开始读取发送
7.开始创建数据包
8.开始发送
9.关闭
//定义发送信息的人
DatagramSocket ds=new DatagramSocket();
//定义字节数组
byte []bs=new byte[10];
//定义空数据包
DatagramPacket dp=null;
//定义要发送文件的对象
File file=new File("D:\\6.jpg");
//定义字节读取流
FileInputStream fis=new FileInputStream(file);
BufferedInputStream bis=new BufferedInputStream(fis);
//开始读取发送
while((bis.read(bs))!=-1) {
//开始创建数据包
dp=new DatagramPacket(bs, bs.length,
InetAddress.getByName("127.0.0.1"),6969);
//开始发送
ds.send(dp);
}
//文件发送完成后,在额外发送一个数据包
dp=new DatagramPacket("拜拜".getBytes(), "拜拜".getBytes().length,
InetAddress.getByName("127.0.0.1"),6969);
//开始发送
ds.send(dp);
//关闭
ds.close();
bis.close();
System.out.println("发送完成^_^");
3.3.2 接收方
1.定义接收信息的人
2.定义接收数据包
3.定义接收的字节数据
4.定义保存的文件路径
5.定义字节写入流
6. 开始接收(用while循环)
7.保存到本地
System.out.println("小可爱上线~,等待发送!");
// 定义接收信息的人
DatagramSocket ds = new DatagramSocket(6969);
// 定义接收数据包
DatagramPacket dp = null;
// 定义接收的字节数据
byte[] bs = new byte[10];
// 定义保存的文件路径
File file = new File("D:\\项目");
// 定义字节写入流
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
// 开始接收
while (true) {
// 创建接收的数据包
dp = new DatagramPacket(bs, bs.length);
// 开始接收
ds.receive(dp);
// 把每次接收的字节装换成字符创、
String str = new String(bs);
if (str.contains("拜拜")) {
break;
}
// 保存到本地
bos.write(bs);
bos.flush();
}
//关闭
ds.close();
bos.close();
System.out.println("接收完成");