【Java】网络编程--UDP网络通信编程

简介: 文章目录1 UDP网络通信编程原理1.1 UDP网络通信编程介绍1.2 UDP网络通信编程的基本流程2 UDP网络通信编程案例写在最后

1 UDP网络通信编程原理

1.1 UDP网络通信编程介绍

类 DatagramSocket 何 DatagramPacket(数据包/数据报) 实现了基于 UDP协议网络程序;

UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP数据报一定能够安全送达目的地,也不确定什么时候可以抵达;

DatagramPacket 对象封装了 UDP数据报,在数据报中包含了发送端IP地址和端口号,以及接收端的IP地址和端口号;

UDP协议中每个数据报都给出了完整的地址信息,因此无法建立发送方与接收方的连接。

没有明确的服务端和客户端,演变成数据的发送端和接收端;

接收数据和发送数据都是通过 DatagramSocket 对象完成。

1.2 UDP网络通信编程的基本流程

核心的两个类/对象,DatagramSocket与DatagramPacket;

建立发送端和接收端;

建立数据包;

调用DatagramSocket的发送和接收方法;

关闭DatagramSocket。

2 UDP网络通信编程案例

1.编写一个接收端A,一个发送端B;

2.接收端在 9999端口等待接收数据(receive);

3.发送端向接收端发送数据:“你好!接收端”;

4.接收端接收到发送端的数据后,回复:“你好!发送端”,再退出;

5.发送端接收回复的数据,退出。


UDPReceiverA

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 接收端A
 */
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //1.创建一个DatagramSocket对象,准备在9999接收数据
        DatagramSocket socket = new DatagramSocket(9999);
        //2.构建一个DatagramPacket对象,准备接收数据
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.调用接收方法,将通过网络传输的 DatagramPacket对象 填充到 packet对象
        System.out.println("接收端A 等待接收数据...");
        socket.receive(packet);
        //4.把packet进行拆包,取出数据
        int length = packet.getLength();//实际数据字节长度
        byte[] data = packet.getData();//实际接收的数据
        String s = new String(data, 0, length);
        System.out.println(s);
        //回复信息给B端
        data = "你好!发送端".getBytes();
        packet = new DatagramPacket(data, 0, data.length,
                InetAddress.getLocalHost(), 9998);
        socket.send(packet);
        //5.关闭资源
        socket.close();
    }
}

UDPSenderB

import java.io.IOException;
import java.net.*;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 发送端B
 */
public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        //1.创建 DatagramSocket 对象,准备在9998发送和接收数据
        DatagramSocket socket = new DatagramSocket(9998);
        //2.将需要发送的数据,封装到 DatagramPacket 中
        byte[] data = "你好!接收端".getBytes();
        DatagramPacket datagramPacket =
                new DatagramPacket(data, 0, data.length,
                        InetAddress.getLocalHost(), 9999);
        socket.send(datagramPacket);
        //接收A消息
        socket.receive(datagramPacket);
        int length = datagramPacket.getLength();//实际数据字节长度
        data = datagramPacket.getData();//实际接收的数据
        String s = new String(data, 0, length);
        System.out.println(s);
        //关闭资源
        socket.close();
    }
}


相关文章
|
4天前
|
网络协议 算法 Java
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
【Java网络编程】网络编程概述、UDP通信(DatagramPacket 与 DatagramSocket)
16 3
|
15小时前
|
Java 开发者 Spring
Java一分钟之-Java网络编程基础:Socket通信
【5月更文挑战第13天】本文介绍了Java Socket编程基础知识,包括使用`ServerSocket`和`Socket`类建立连接,通过`OutputStream`和`InputStream`进行数据传输。常见问题涉及忘记关闭Socket导致的资源泄漏、网络异常处理及并发同步。理解Socket通信原理并掌握异常处理、资源管理和并发控制,能帮助开发者构建更稳定的网络应用。
9 1
|
2天前
|
网络协议 Linux 网络架构
|
4天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
9 0
|
6天前
|
网络协议 Java Linux
【探索Linux】P.29(网络编程套接字 —— 简单的TCP网络程序模拟实现)
【探索Linux】P.29(网络编程套接字 —— 简单的TCP网络程序模拟实现)
12 0
|
6天前
|
存储 网络协议 算法
【探索Linux】P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
【探索Linux】P.28(网络编程套接字 —— 简单的UDP网络程序模拟实现)
14 0
|
6天前
|
网络协议 算法 Linux
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
【探索Linux】P.27(网络编程套接字 —— UDP协议介绍 | TCP协议介绍 | UDP 和 TCP 的异同)
14 0
|
24天前
|
监控 Java 开发者
深入理解 Java 网络编程和 NIO
【4月更文挑战第19天】Java网络编程基于Socket,但NIO(非阻塞I/O)提升了效率和性能。NIO特点是非阻塞模式、选择器机制和缓冲区,适合高并发场景。使用NIO涉及通道、选择器和事件处理,优点是高并发、资源利用率和可扩展性,但复杂度、错误处理和性能调优是挑战。开发者应根据需求选择是否使用NIO,并深入理解其原理。
|
JSON 前端开发 安全
Java网络编程IO模型 --- BIO、NIO、AIO详解
Java网络编程IO模型 --- BIO、NIO、AIO详解
302 0
Java网络编程IO模型 --- BIO、NIO、AIO详解
|
JSON 安全 JavaScript
Java网络编程IO模型 --- BIO、NIO、AIO详解
一文教你搞懂Java网络编程 BIO、NIO、AIO
381 0
Java网络编程IO模型 --- BIO、NIO、AIO详解