涉及到知识点
1.基本类型
发送端
package UDP_文件上传;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
// 基本类型 发送端
//1.使用datagramSocket 指定端口,创建发送端
//2.将基本类型转为字节数组
//3.封装成 DatagramPacket包裹,需要指定目的地
//4.发送包裹sent(DatagramPacket p)
//5.释放资源
public class UDP_typeclient {
public static void main(String[] args) throws Exception {
System.out.println("客户端开始工作");
//1.使用datagramSocket 指定端口,创建发送端
DatagramSocket socket =new DatagramSocket(8888);
//2.准备数据转成字节数组(重点!!!!)
ByteArrayOutputStream out =new ByteArrayOutputStream();
DataOutputStream ob =new DataOutputStream(new BufferedOutputStream(out));
ob.writeBoolean(true);
ob.writeUTF("成功了");
ob.writeInt(666);
ob.flush();//一定不要忘了!!!!!!!!
byte [] datas =out.toByteArray();// 不要忘了
//3.封装成 DatagramPacket包裹,需要指定目的地
DatagramPacket packet =new DatagramPacket(datas, datas.length,new InetSocketAddress("localhost", 9999));
//4.发送包裹sent(DatagramPacket p)
socket.send(packet);
//5.释放资源
socket.close();
}
}
接收端
package UDP_文件上传;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
// 基本类型接收端
//1.使用datagramSocket 指定端口,创建接收端
//2.准备容器封装成 datagramPacket包裹
//3.阻塞式接收包裹receive(datagramPacket)
//4.分析数据 将字节数组转为对应类型
//byte[] getDate()
// getlength()
//5.释放资源
public class UDP_typesever {
public static void main(String[] args) throws Exception {
System.out.println("服务器启动...");
//1.使用datagramSocket 指定端口,创建接收端
DatagramSocket serve =new DatagramSocket(9999);
byte [] buf =new byte[1024*60];
//2.准备容器封装成 datagramPacket包裹
DatagramPacket pack =new DatagramPacket(buf, buf.length);
//3.阻塞式接收包裹receive(datagramPacket)
serve.receive(pack);
//4.分析数据
//byte[] getDate()
// getlength()
byte [] datas=pack.getData();
DataInputStream in =new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(datas)));
boolean bool =in.readBoolean();
String str =in.readUTF();
int num =in.readInt();
System.out.println(bool + "--->"+str + num);
//5.释放资源
serve.close();
}
}
2.图片发送
发送图片的工具类
package UDP_文件上传;
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;
public class IOUtils {//文件——程序——字节数组 (文件到字节数组)
//字节数组——程序——文件(字节数组到文件)
public static byte[] fileToarray(String path) {//文件到字节数组
File file = new File(path);
byte [] date =null;
//选择流
InputStream in= null;
ByteArrayOutputStream inarray= null;
try {
in = new FileInputStream(file);
inarray =new ByteArrayOutputStream();
//操作(分段读取)
byte [] flush =new byte [128];//缓冲容器
int len = -1;//接收容器
while((len = in.read(flush))!=-1) {
inarray.write(flush,0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {//释放资源
if(null!=in) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return inarray.toByteArray();//将字节数组返回
}
public static void arrayTofile(byte []array,String path) {//字节数组到文件
//选择源
File file =new File(path);
//选择流
OutputStream output =null;
InputStream arrayin = null;
try {
output = new FileOutputStream(file );
//操作
arrayin =new ByteArrayInputStream(array);
output.write(array, 0, array.length);
output.flush();//刷新
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {//关闭流
if(null!=output) {
try {
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
发送端
package UDP_文件上传;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class UDP_Fileclient {
public static void main(String[] args) throws Exception {
System.out.println("客户端开始工作");
//1.使用datagramSocket 指定端口,创建发送端
DatagramSocket socket =new DatagramSocket(8888);
//2.准备数据转成字节数组
//IOUtils是我自己写的工具类
byte [] datas=IOUtils.fileToarray("G:/其他/1.jpeg");//图片(文件)转为字节数组
//3.封装成 DatagramPacket包裹,需要指定目的地
DatagramPacket packet =new DatagramPacket(datas, datas.length,new InetSocketAddress("localhost", 9999));
//4.发送包裹sent(DatagramPacket p)
socket.send(packet);
//5.释放资源
socket.close();
}
}
接收端
package UDP_文件上传;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDP_Filesever {
public static void main(String[] args) throws Exception {
System.out.println("服务器启动...");
//1.使用datagramSocket 指定端口,创建接收端
DatagramSocket serve =new DatagramSocket(9999);
byte [] buf =new byte[1024*60];
//2.准备容器封装成 datagramPacket包裹
DatagramPacket pack =new DatagramPacket(buf, buf.length);
//3.阻塞式接收包裹receive(datagramPacket)
serve.receive(pack);
//4.分析数据
//byte[] getDate()
// getlength()
byte [] datas=pack.getData();
IOUtils.arrayTofile(datas, "UDP.jpeg");
//5.释放资源
serve.close();
}
}