Java 网络编程UDP协议之发送数据和接收数据的详解

简介: Java 网络编程UDP协议之发送数据和接收数据的详解
+关注继续查看

UDP协议:

  1. 用户数据报协议(User Datagram Protocol)
  2. UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一个台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。由于使用UDP协议消耗资源少,通信效率高,所以通常都会用于音频,视频和普通数据的传输。
  3. 例如视频会议通常会采用UDP协议,因为这种情况偶尔丢一两个数据包,也不会对接收结果产生太大影响,但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时,不建议使用UDP协议。

接下来我们使用UDP协议发送数据和接收数据

1、首先实现发送数据SendDemo

public class SendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端的Socket对象
        DatagramSocket ds = new DatagramSocket();
        //创建数据,并把数据打包
        byte[] bytes = "你好,UDP".getBytes();
        int length = bytes.length;
        InetAddress address = InetAddress.getByName("192.168.0.124");
        //端口号
        int port = 10000;
        DatagramPacket dp = new DatagramPacket(bytes, length, address, port);
        //调用DatagramSocket对象的方法发送数据
        ds.send(dp);
        //关闭发送端
        ds.close();
    }
}

2、之后创建ReceiveDemo类接收数据,具体注释已经在代码中给出

public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        //创建接收端的Socket对象(DatagramSocket)
        //DatagramSocket(int port)构造数据报套接字并将其绑定到本地主机上的指定端口
        DatagramSocket ds = new DatagramSocket(10000);
        //创建一个数据包,用于接收数据
        //DatagramPacket(byte[] buf,int length)构造一个DatagramPacket用于接收长度为length的数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        //调用DatagramSocket对象的方法接收数据
        ds.receive(dp);
        //解析数据包,并把数据在控制台显示
        //byte[] getData() 返回数据缓冲区
        byte[] datas = dp.getData();
        //int getLength()返回要发送的数据的长度或接收到的数据的长度
        int length = dp.getLength();
        String dataString = new String(datas, 0, length);
        System.out.println("数据是:" + dataString);
        //关闭接收端
        ds.close();
    }
}

之后,我们首先运行一下ReceiveDemo类接收数据我们可以看到控制台,之后再去运行SendDemo发送数据,我们就可以看到ReceiveDemo类对应的控制台接收到了数据。

image

练习:

UDP发送数据:数据来自于键盘输入,直到输入的数据是886,发送数据结束。

UDP接收数据:因为接收端不知道发送端什么时候停止发送数据,故采用死循环接收。

首先创建发送端代码如下:

public class SendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端的Socket对象
        DatagramSocket ds = new DatagramSocket();
        //自己封装键盘录入数据
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = br.readLine()) != null) {
            //输入的数据是886,发送数据结束
            if (line.equals("886")) {
                break;
            }
            //创建数据,并把数据打包
            byte[] bys = line.getBytes();
            DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.0.124"), 12345);
            //调用DatagramSocket对象的方法发送数据
            ds.send(dp);
        }
        //关闭发送端
        ds.close();
    }
}

接着创建接收端代码如下,注释已经在代码中给出:

public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        //创建接收端
        DatagramSocket ds = new DatagramSocket(12345);
        while (true) {
            //创建数据报包,用于接收数据
            byte[] bys = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bys, bys.length);
            //调用DatagramSocket对象的方法接收数据
            ds.receive(dp);
            //解析数据包,并把数据在控制台显示
            System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));
        }
    }
}

效果如图所示:

发送端发送数据:

image

接收端接收数据:

image

以上就是UDP协议的简单使用,有不当之处可以在评论区指出~


目录
相关文章
|
5天前
|
网络协议 安全 Java
Java网络编程入门指南:TCP/IP协议与Socket通信
Java网络编程入门指南:TCP/IP协议与Socket通信
15 1
|
7天前
|
网络协议 安全 Java
【零基础学Java】—网络编程(五十三)
【零基础学Java】—网络编程(五十三)
|
7天前
|
网络协议 Java
Java网络编程
Java网络编程
|
18天前
|
Java 程序员
百度搜索:蓝易云【Java网络编程RMI框架详解。】
RMI框架提供了一种方便的方式来实现分布式系统中的远程通信和方法调用。它简化了网络编程的复杂性,使得开发人员可以专注于业务逻辑而不必过多关注底层网络细节。通过RMI框架,Java开发人员可以轻松构建可扩展、可靠的分布式应用程序。
21 2
|
2月前
|
域名解析 网络协议 Oracle
Java的第十五篇文章——网络编程(后期再学一遍)
Java的第十五篇文章——网络编程(后期再学一遍)
|
2月前
|
存储 网络协议 Java
java网络编程(详解)
网络编程是一种基于计算机网络的应用程序开发技术。它涉及到在不同计算机之间传输数据,允许程序在网络上进行通信和交互。在网络编程中,开发者可以使用不同的编程语言和协议来实现数据的传输和通信
47 0
java网络编程(详解)
|
3月前
|
存储 监控 数据可视化
Java网络编程:下载进度监控实现详解
文件下载是许多应用程序的重要功能,而下载进度监控是提高用户体验的关键。在本文中,我们将详细介绍如何使用Java实现文件下载进度监控,以便用户可以实时了解文件下载的进度。
49 0
|
3月前
|
存储 Java UED
Java网络编程:实现文件断点续传功能
文件下载是网络应用程序中的常见任务,而断点续传是提供更好用户体验的重要功能之一。本文将详细介绍如何使用Java实现文件断点续传功能,使用户能够在下载中断后从上次中断的地方继续下载。
90 0
|
3月前
|
存储 监控 网络协议
Java网络编程:文件下载详解
文件下载是网络应用程序中的一个常见任务,允许用户从远程服务器获取文件。Java提供了丰富的网络编程库,使文件下载变得相对简单。本文将详细介绍如何使用Java进行文件下载,并提供一些相关内容的解释。
77 0
|
3月前
|
传感器 网络协议 算法
Java网络编程实时数据流处理
在现代计算机应用程序中,处理实时数据流是一项关键任务。这种数据流可以是来自传感器、网络、文件或其他源头的数据,需要即时处理并做出相应的决策。Java提供了强大的网络编程工具和库,可以用于处理实时数据流。本文将详细介绍如何使用Java进行实时数据流处理。
60 0
相关产品
云迁移中心
推荐文章
更多