Api—无连接
UPD:
效率高但是不安全,容易造成数据丢失。
单播:一对一
组播:多对多
广播:一对多
Socket:
效率低,每次都要连接,浪费时间,但是安全性高。
单播的使用
发信息
//发信息的人
DatagramSocket ds = new DatagramSocket();
//定义字节数组
byte[] bs = new byte[300];
//定义数据包(null)
DatagramPacket dp = null;
//定义要发送的文件对象
File file = new File("D:\kk\111.jpg");
//定义字节读取流
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
//开始读取
int count = 0;
while (bis.read(bs) != -1) {
count += 10;
System.out.println(count);
//开始创建数据包
dp = new DatagramPacket(bs, bs.length, InetAddress.getByName("127.0.0.1"), 6666);
//开始发送
ds.send(dp);
}
//文件发送完成之后。再额外发送一个数据包,结束包
dp = new DatagramPacket("拜拜".getBytes(), "拜拜".getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
//开始发送
ds.send(dp);
//关闭流
ds.close();
bis.close();
收信息
//接收信息的人
DatagramSocket ds = new DatagramSocket(6666);
//接收的数据包
DatagramPacket dp = null;
//接收的字节数组
byte[] bs = new byte[300];
//保存的文件对象
File file = new File("D:\kk\222.jpg");
//字节写入流
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();