【java】网络编程实例 UDP协议传输图片

本文通过实例讲解了使用Java进行网络编程,利用UDP协议传输图片数据的方法,包括UDP套接字的创建、数据打包及发送、接收并还原图片等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
//  端口号被占用,换个端口号任然有问题,因为我是先运行客户端,所以客户端一直占用着端口,将客户端关闭之后再运行服务器端即可

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老坛酸菜吃鸭子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值