**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();
    }
}