package cn.UDP;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP基本步骤
* 文件接收端
* 1.使用DatagramSocket创建接收端,指定端口
* 2.准备容器,封装成DatagramPacket包裹
* 3.阻塞式接受包裹receive(DatagramPacket p)
* 4.分析数据 getData() 将字节数组转换为文件
* 5.释放资源
* @author Chill Lyn
*
*/
public class UDPServerFile {
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.out.println("server:");
// 1.使用DatagramSocket创建接收端,指定端口
DatagramSocket server = new DatagramSocket(8090);
// 2.准备容器,封装成DatagramPacket包裹
byte[] container = new byte[1024 * 60];
DatagramPacket packet = new DatagramPacket(container, container.length);
// 3.阻塞式接受包裹receive(DatagramPacket p)
server.receive(packet);
// 4.分析数据 getData() 将字节数组转换为文件
byte[] datas = packet.getData();
ButtFB.byteArrayToFile(datas, "124.jpg");
// 5.释放资源
server.close();
}
}
package cn.UDP;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* UDP基本步骤
* 文件:发送端
* 1.使用DatagramSocket创建发送端,指定端口
* 2.将文件,转成字节数组
* 3.封装成DatagramPacket包裹,指定目的地
* 4.发送包裹send(DatagramPacket p)
* 5.释放资源
* @author Chill Lyn
*
*/
public class UDPClientFile {
public static void main(String[] args) throws IOException {
System.out.println("client:");
// 1.使用DatagramSocket创建发送端,指定端口
DatagramSocket client = new DatagramSocket(8080);
// 2.将文件转成字节数组
byte[] datas = ButtFB.fileToByteArray("123.jpg");
// 3.封装成DatagramPacket包裹,指定目的地
DatagramPacket packet = new DatagramPacket(datas, datas.length, new InetSocketAddress("localhost", 8090));
// 4.发送包裹send(DatagramPacket p)
client.send(packet);
// 5.释放资源
client.close();
}
}
package cn.UDP;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 对接流
* 1、文件读取到字节数组
* 2、字节数组写到文件
* @author Chill Lyn
*
*/
public class ButtFB {
/**
* 文件读取到字节数组
* 1.文件到程序:文件字节输入流FileInputStream
* 2.程序到字节数组:字节数组输出流ByteArrayOutputStream
* @param srcPath
* @return
*/
public static byte[] fileToByteArray(String srcPath) {
// 创建源和目的地
File src = new File(srcPath);
byte[] datas = null;
// 选择流
try (InputStream is = new BufferedInputStream(new FileInputStream(src));
ByteArrayOutputStream baos = new ByteArrayOutputStream();) {
// 操作(分段读取)
byte[] flush = new byte[1024];// 缓冲容器
int len = -1;// 接收长度
while ((len = is.read(flush)) != -1) {
baos.write(flush, 0, len);
}
baos.flush();
// 获取数据
datas = baos.toByteArray();
return datas;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 字节数组写到文件
* 1.字节数组读取到程序中:字节数组输入流ByteArrayInputStream
* 2.程序写出到文件:文件字节输出流FileOutputStream
* @param datas
* @param destPath
*/
public static void byteArrayToFile(byte[] datas, String destPath) {
// 创建源
File dest = new File(destPath);
// 选择流
try (InputStream is = new ByteArrayInputStream(datas);
OutputStream os = new BufferedOutputStream(new FileOutputStream(dest, false));) {
// 操作(分段读取)
byte[] flush = new byte[1024];// 缓冲容器
int len = -1;// 接收长度
while ((len = is.read(flush)) != -1) {
os.write(flush, 0, len);
}
os.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
CommonsIO简化操作
package cn.UDP;
import java.io.File;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import org.apache.commons.io.FileUtils;
/**
* UDP基本步骤
* 文件接收端
* 1.使用DatagramSocket创建接收端,指定端口
* 2.准备容器,封装成DatagramPacket包裹
* 3.阻塞式接受包裹receive(DatagramPacket p)
* 4.分析数据 getData() 将字节数组转换为文件
* 5.释放资源
* @author Chill Lyn
*
*/
public class UDPServerFileCommonsIO {
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.out.println("server:");
// 1.使用DatagramSocket创建接收端,指定端口
DatagramSocket server = new DatagramSocket(8090);
// 2.准备容器,封装成DatagramPacket包裹
byte[] container = new byte[1024 * 60];
DatagramPacket packet = new DatagramPacket(container, container.length);
// 3.阻塞式接受包裹receive(DatagramPacket p)
server.receive(packet);
// 4.分析数据 getData() 将字节数组转换为文件
byte[] datas = packet.getData();
FileUtils.writeByteArrayToFile(new File("124.jpg"), datas, true);
// 5.释放资源
server.close();
}
}
package cn.UDP;
import java.io.File;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import org.apache.commons.io.FileUtils;
/**
* UDP基本步骤
* 文件:发送端
* 1.使用DatagramSocket创建发送端,指定端口
* 2.将文件,转成字节数组
* 3.封装成DatagramPacket包裹,指定目的地
* 4.发送包裹send(DatagramPacket p)
* 5.释放资源
* @author Chill Lyn
*
*/
public class UDPClientFileCommonsIO {
public static void main(String[] args) throws IOException {
System.out.println("client:");
// 1.使用DatagramSocket创建发送端,指定端口
DatagramSocket client = new DatagramSocket(8080);
// 2.将文件转成字节数组
byte[] datas = FileUtils.readFileToByteArray(new File("123.jpg"));
// 3.封装成DatagramPacket包裹,指定目的地
DatagramPacket packet = new DatagramPacket(datas, datas.length, new InetSocketAddress("localhost", 8090));
// 4.发送包裹send(DatagramPacket p)
client.send(packet);
// 5.释放资源
client.close();
}
}