Java网络编程UDP

1.类 DatagramSocket和 DatagramPacket实现了基于UDP协议网络程序。2.UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
3. DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
4.UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接

UDP网络编程原理

 

复制代码
public class UDP1 {
    public static void main(String[] args) throws IOException {
        //创建一个DatagramSocket对象,准备在9999接收
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        //构建一个datagramPacket对象,准备接收数据
        byte[] buf = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
        //调用接口方法,将通过网络传输DatagramPacket对象
        System.out.println("等待接收数据");
        datagramSocket.receive(datagramPacket);
        //可以把packet进行拆包显示
        int length = datagramPacket.getLength();
        byte[] data = datagramPacket.getData();
        System.out.println(new String(data,0,length));

        //发送数据
        byte[] data2 = "好的明天见".getBytes();
        DatagramPacket datagramPacket1 = new DatagramPacket(data2, data2.length, InetAddress.getByName("192.168.91.1"),9998);
        datagramSocket.send(datagramPacket1);

        //关闭资源
        datagramSocket.close();
    }
}
复制代码
复制代码
public class UDP2 {
    public static void main(String[] args) throws IOException {
        //创建一个DatagramSocket对象,准备发送数据,发送端也可以接收数据
        DatagramSocket datagramSocket = new DatagramSocket(9998);
        //构建一个datagramPacket对象,准备接收数据
        byte[] buf = "你好,切火锅嘛?".getBytes();
        DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, InetAddress.getByName("192.168.91.1"),9999);
        //调用接口方法,将通过网络传输DatagramPacket对象
        datagramSocket.send(datagramPacket);

        //接收数据
        byte[] data = new byte[1024];
        DatagramPacket datagramPacket1 = new DatagramPacket(data, data.length);
        datagramSocket.receive(datagramPacket1);
        int length = datagramPacket1.getLength();
        byte[] data1 = datagramPacket1.getData();
        System.out.println(new String(data1,0,length));
        //关闭资源
        datagramSocket.close();
    }
}
复制代码

案例

 

 

复制代码
服务器
public class TCP1 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8888);
        System.out.println("等待客户端连接");
        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream();
        byte[] b = new byte[100];
        int len=0;
        String downLoadname="";
        while ((len= inputStream.read(b))!=-1){
            downLoadname = new String(b,0,len);
        }
        System.out.println("查找的文件名为:"+downLoadname);
        String resFilename = "";
        if ("腰鼓".equals(downLoadname)){
            resFilename = "src\\腰鼓.mp3";
        }else if ("稻香".equals(downLoadname)){
            resFilename = "src\\腰鼓.mp3";
        }

        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(resFilename));
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
        byte[] b1 = new byte[10240];
        int len1=0;
        while ((len= bufferedInputStream.read(b1))!=-1){
            bufferedOutputStream.write(b1,0,len);
            //bufferedOutputStream.flush();
        }
        socket.shutdownOutput();

        inputStream.close();
        bufferedOutputStream.close();
        socket.close();
        serverSocket.close();
    }
}
复制代码
复制代码
客户端
public class TCP2 {
    @SuppressWarnings({"all"})
    public static void main(String[] args) throws IOException {

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入下载的文件名称:");
        String downLoadFilename = scanner.next();

        Socket socket = new Socket(InetAddress.getLocalHost(),8888);
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write(downLoadFilename.getBytes());
        socket.shutdownOutput();

        String destFile="d:\\"+downLoadFilename+".mp3";
        BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(destFile));
        byte[] b = new byte[10240];
        int len=0;
        while ((len= bufferedInputStream.read(b))!=-1){
            bufferedOutputStream.write(b,0,len);
            //bufferedOutputStream.flush();
        }
        System.out.println("文件下载成功!");

        bufferedOutputStream.close();
        bufferedInputStream.close();
        socket.close();
        outputStream.close();
    }
}
复制代码

 

posted @   贝勒爷ma  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示