Api 无连接&单播
单播 :一对一
UDP:效率高但是不安全,容易造成数据丢失。
SocKet:效率低连接浪费时间,但是安全。
以发快递、收快递举例:
发快递:
//定义发送信息
String str = "一个来自远方的快递!";
//定义发送信息
DatagramSocket ds = new DatagramSocket();
//打包快递
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length,
InetAddress.getByName("127.0.0.1"), 3838);
//开始发送
ds.send(dp);
ds.close();
System.out.println("发送完成!");
接收快递:
//定义接收信息的人
DatagramSocket ds = new DatagramSocket(3838);
//定义byte数组用来接收信息
byte[] bs = new byte[20];
//定义接收信息的数据包
DatagramPacket dp = new DatagramPacket(bs, bs.length);
//开始接收
ds.receive(dp);
//将接收的字节数组转换字符串
String str = new String(bs);
System.out.println("接收的信息是:" + str);
//关闭流
ds.close();
单播的使用
发送方:
1.定义发信息的人
DatagramSocket ds = new DatagramSocket();
2.定义字节数组
byte[] bs = new byte[1000];
3.定义数据包(空)
DatagramPacket dp = null;
4.定义要发送的文件对象
File file = new File("D:\壁纸\111.jpg");
5.定义字节读取流
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
6.开始读取
int count = 0;
while (bis.read(bs) != -1) {
count += 10;
System.out.println(count);
6.1开始创建数据包
dp = new DatagramPacket(bs, bs.length, InetAddress.getByName("127.0.0.1"), 3838);
6.2开始发送
ds.send(dp);
}
7.文件发送完成之后。再额外发送一个数据包,结束包
dp = new DatagramPacket("拜拜".getBytes(), "拜拜".getBytes().length, InetAddress.getByName("127.0.0.1"), 3838);
ds.send(dp);
8.关闭流
ds.close();
bis.close();
接收方:
1.定义接收信息的人、接收的数据包、接收的字节数组、
保存的文件对象、字节写入流
DatagramSocket ds = new DatagramSocket(3838);
DatagramPacket dp = null;
byte[] bs = new byte[10];
File file = new File("D:\壁纸\222.jpg");
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
2.开始接收:创建接收数据并接受再转成字符串
while (true) {
dp = new DatagramPacket(bs, bs.length);
ds.receive(dp);
String str = new String(bs);
if (str.contains("拜拜")) {
break;
}
3.保存本地
bos.write(bs);
bos.flush();
4.关闭流
ds.close();
bos.close();