**UDP传送图片
基于UDP本身特性此处接收端暂时不关闭
如果想要可靠且发送完关闭的请用TCP
UDP的缺陷如下:
一是数据包容易丢失,二是数据包无序
接收端
先启动接收端 再开启发送端 接收结果等发送端发送之后关闭接收端即可查看
package day15_18;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Demo02_UdpReceive {
public static void main(String[] args) throws Exception {
//创建socket对象
DatagramSocket ds = new DatagramSocket(10086);
//创建文件要保存的位置 1.jpg是自己写的到达桌面上必须有个类型一样的接收即使你桌面上没有 1.jpg也要写在这里
FileOutputStream fos = new FileOutputStream("C:\\Users\\阿云\\Desktop\\1.jpg");
//打包
DatagramPacket dp = new DatagramPacket(new byte[1024 * 8], 1024 * 8);
try {
while (true) {
ds.receive(dp);
byte[] date = dp.getData();
int length = dp.getLength();
fos.write(date, 0, length);
}
} catch (IOException e) {
ds.close();
}
fos.close();
}
}
}
//while循环接收 坏处不知道什么时候停止异常处理的不是很完美 这里假设最后一组大小不是8192 如果
//是8192的话先采取下面的抛异常处理 等待后续知识更新
/* while (true) {
ds.receive(dp);
byte[] date = dp.getData();
int length = dp.getLength();
System.out.println(length);
if (length!=8192){
ds.close();
fos.close();
break;
}
fos.write(date, 0, length);
*/
发送端
package day15_18;
import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
//DUP发送端
public class Demo02_UdpSent {
public static void main(String[] args) throws Exception {
//创建发送端socket对象
DatagramSocket ds = new DatagramSocket();
//创建字节输入流读取本地文件--填写你要传东西的地址这里的图片我是放在桌面
InputStream is=new FileInputStream("C:\\Users\\阿云\\Desktop\\壁纸\\1.jpg");
//传输动作--先进行while判断是否还有字节再进行不断传输字节流相关知识
byte[] bys = new byte[1024 * 8];
int len;
while ((len = is.read(bys)) != -1) {
//将数据不断打包进行发送 依次传入数组 数组范围 地址 端口号
DatagramPacket dp = new DatagramPacket(bys, 0, len, InetAddress.getByName("127.0.0.1"), 10086);
//socket 对象发送内容
ds.send(dp);
}
//发送完关闭
is.close();
ds.close();
}
}