import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket=new DatagramSocket(9999);
//1.创建一个图片文件
File newfile=new File("微信图片_2022.jpg");
//2.创建一个数组用于存放数据包数据
byte[] buf=new byte[8192];
//3.创建一个文件输出流用于写数据到数据包中
FileOutputStream fileOutputStream=new FileOutputStream(newfile);
while(true){
//4.创建数据包用于接收数据
DatagramPacket datagramPacket=new DatagramPacket(buf,8192);
datagramSocket.receive(datagramPacket);
//5.往文件中写数据,这里相当于将数据发送出去
fileOutputStream.write(datagramPacket.getData(),0,datagramPacket.getLength());
//6.刷新资源
fileOutputStream.flush();
//7.释放资源
fileOutputStream.close();
}
}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo {
public static void main(String[] args) throws IOException {
//1,创建Socket对象
DatagramSocket datagramSocket=new DatagramSocket(9999);
//创建一个byte数组用于存储所读取的文件内容
byte[] buf=new byte[1024*8];
//2,创建文件输入流对象读取文件内容
FileInputStream fileInputStream=new FileInputStream("微信图片_2022.jpg");
int len=0;
while((len=fileInputStream.read(buf))!=-1){
System.out.println(len);
//3,创建数据包用于发送到套接字
DatagramPacket datagramPacket=new DatagramPacket(buf,len, InetAddress.getByName("172.20.2.154"),12345);
datagramSocket.send(datagramPacket);
}
//4,释放资源
fileInputStream.close();
datagramSocket.close();
}
}
// "C:\Program Files\Java\jdk-18\bin\java.exe" "-javaagent:D:\软件\IDEA\IntelliJ IDEA Community Edition 2021.3.3\lib\idea_rt.jar=54630:D:\软件\IDEA\IntelliJ IDEA Community Edition 2021.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\JAVAWORK\test\out\production\网络编程 UDP.test01.SendDemo
// Exception in thread "main" java.net.BindException: Address already in use: bind
// at java.base/sun.nio.ch.Net.bind0(Native Method)
// at java.base/sun.nio.ch.Net.bind(Net.java:555)
// at java.base/sun.nio.ch.DatagramChannelImpl.bindInternal(DatagramChannelImpl.java:1194)
// at java.base/sun.nio.ch.DatagramChannelImpl.bind(DatagramChannelImpl.java:1164)
// at java.base/sun.nio.ch.DatagramSocketAdaptor.bind(DatagramSocketAdaptor.java:107)
// at java.base/java.net.DatagramSocket.createDelegate(DatagramSocket.java:1416)
// at java.base/java.net.DatagramSocket.<init>(DatagramSocket.java:331)
// at java.base/java.net.DatagramSocket.<init>(DatagramSocket.java:390)
// at java.base/java.net.DatagramSocket.<init>(DatagramSocket.java:356)
// at UDP.test01.SendDemo.main(SendDemo.java:14)
// 进程已结束,退出代码1
// 端口号被占用,换个端口号任然有问题,因为我是先运行客户端,所以客户端一直占用着端口,将客户端关闭之后再运行服务器端即可