高级API_UPD

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("接收完成");
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值