Java UDP文件上传的实现
发送端
-
文件上传
- 1 使用DatagramSocket 创建接收端
- 2 准备容器 一定要转成字节数组
- 3 封装DatagramPacket包裹
- 4 发送数据报
- 5 释放资源
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* UDP
* <p>文件上传
* 1 使用DatagramSocket 创建接收端
* 2 准备容器 一定要转成字节数组
* 3 封装DatagramPacket包裹
* 4 阻塞式接收包裹receive(DatagramPacket p)
* 5 分析数据 byte[] getData, getLength。
* 6 释放资源 </p>
* @author ad
*
*/
public class UdpFileClient {
public static void main(String[] args) throws Exception {
System.out.println("发送端启动中...");
//* 1 使用DatagramSocket 创建发送端
DatagramSocket client = new DatagramSocket(18888);
// * 2 准备容器 一定要转成字节数组
String data = "D:\\Desktop\\新建文本文档.txt";
byte[] datas = fileToByteArray(data);
//* 3 封装DatagramPacket包裹
DatagramPacket packet = new DatagramPacket(datas, datas.length,
new InetSocketAddress("192.168.41.144", 19999));
//* 4 发送包裹send(DatagramPacket p)
client.send(packet);
// * 5 释放资源 </p>
client.close();
}
/**
* 读取文件,转成字节数组
* @param path
* @return
*/
public static byte[] fileToByteArray(String path) {
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
is = new FileInputStream(path);
baos = new ByteArrayOutputStream();
int len = -1;
byte[] datas = new byte[1024 * 60];
while ((len = is.read(datas)) != -1) {
baos.write(datas, 0, len);
}
baos.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return baos.toByteArray();
}
}
接收端
-
文件存储
- 1 使用DatagramSocket 创建接收端
- 2 准备容器 一定要转成字节数组
- 3 封装DatagramPacket包裹
- 4 阻塞式接收包裹receive(DatagramPacket p)
- 5 分析数据 byte[] getData, getLength。
- 6 释放资源
import java.io.ByteArrayInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP
* <p>文件存储
* 1 使用DatagramSocket 创建接收端
* 2 准备容器 一定要转成字节数组
* 3 封装DatagramPacket包裹
* 4 阻塞式接收包裹receive(DatagramPacket p)
* 5 分析数据 byte[] getData, getLength。
* 6 释放资源 </p>
* @author ad
*
*/
public class UdpFileServer {
public static void main(String[] args) throws Exception {
System.out.println("接收端启动中...");
//* 1 使用DatagramSocket 创建接收端
DatagramSocket server = new DatagramSocket(19999);
// * 2 准备接收容器 一定要转成字节数组
byte[] container = new byte[1024 * 60];
//* 3 封装DatagramPacket包裹
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
//* 4 阻塞式接收包裹receive(DatagramPacket p)
server.receive(packet);
//* 5 分析数据 byte[] getData, getLength。
byte[] datas = packet.getData();
byteArrayToFile(datas, "1.txt");
// * 6 释放资源 </p>
server.close();
}
public static void byteArrayToFile(byte[] datas, String path) {
OutputStream os = null;
ByteArrayInputStream bais = null;
try {
os = new FileOutputStream(path);
bais = new ByteArrayInputStream(datas);
int len = -1;
byte[] flush = new byte[1024 * 60];
while ((len = bais.read(flush)) != -1) {
os.write(flush, 0, len);
}
os.flush();
System.out.println("保存成功!");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}