当前位置: 首页 > news >正文

Java Socket -- UDP通信

文章目录

    • 前言
    • UDP 协议
    • UDP 服务器端示例
    • UDP 客户端示例
    • 示例说明
    • 运行步骤
    • 运行结果
    • 注意事项

前言

当你迷茫的时候,请点击 目录大纲 快速查看前面的技术文章,相信你总能找到前行的方向

另外,本文相关代码已上传 gitee仓库,欢迎关注收藏

UDP 协议

UDP (User Datagram Protocol) 是一种无连接的传输层协议,Java 提供了 DatagramSocketDatagramPacket 类来实现 UDP 通信。下面是一个简单的 UDP 示例,包含服务器端和客户端代码。

UDP 服务器端示例

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPServer {public static void main(String[] args) {try {// 创建DatagramSocket,监听指定端口DatagramSocket serverSocket = new DatagramSocket(9876);System.out.println("UDP服务器已启动,等待客户端连接...");byte[] receiveData = new byte[1024];while (true) {// 创建接收数据包DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);// 接收数据serverSocket.receive(receivePacket);// 解析数据String message = new String(receivePacket.getData(), 0, receivePacket.getLength());InetAddress clientAddress = receivePacket.getAddress();int clientPort = receivePacket.getPort();System.out.println("收到来自 " + clientAddress + ":" + clientPort + " 的消息: " + message);// 准备响应消息String responseMessage = "服务器已收到你的消息: " + message;byte[] sendData = responseMessage.getBytes();// 创建发送数据包DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);// 发送响应serverSocket.send(sendPacket);}} catch (Exception e) {e.printStackTrace();}}
}

UDP 客户端示例

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;public class UDPClient {public static void main(String[] args) {try {// 创建DatagramSocketDatagramSocket clientSocket = new DatagramSocket();// 获取服务器地址InetAddress serverAddress = InetAddress.getByName("localhost");Scanner scanner = new Scanner(System.in);while (true) {System.out.print("请输入要发送的消息(输入exit退出): ");String message = scanner.nextLine();if ("exit".equalsIgnoreCase(message)) {break;}// 准备发送数据byte[] sendData = message.getBytes();// 创建发送数据包DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, 9876);// 发送数据clientSocket.send(sendPacket);// 准备接收响应byte[] receiveData = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);// 接收响应clientSocket.receive(receivePacket);// 解析响应String response = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("服务器响应: " + response);}// 关闭资源clientSocket.close();scanner.close();} catch (Exception e) {e.printStackTrace();}}
}

示例说明

  1. 服务器端:

    • 创建 DatagramSocket 并绑定到指定端口(9876)
    • 使用 receive() 方法阻塞等待客户端消息
    • 收到消息后,获取客户端地址和端口
    • 发送响应消息回客户端
  2. 客户端:

    • 创建 DatagramSocket (不绑定特定端口,系统自动分配)
    • 从控制台读取用户输入
    • 将消息发送到服务器
    • 等待并接收服务器响应

运行步骤

  1. 先运行服务器端程序(UDPServer)
  2. 然后运行客户端程序(UDPClient)
  3. 在客户端控制台输入消息,服务器会响应并显示

运行结果

注意事项

  • UDP是无连接协议,不保证消息的可靠传输
  • 数据包大小有限制(通常不超过64KB)
  • 适合对实时性要求高但允许少量丢包的应用,如视频流、在线游戏等
  • 如果需要可靠传输,需要在应用层实现确认和重传机制
http://www.dtcms.com/a/317297.html

相关文章:

  • CSS 回流(Reflow)和重绘(Repaint)
  • C语言基础_排序算法和二分法查找
  • TDengine IDMP 背后的技术三问:目录、标准与情景
  • 自学嵌入式 day43 中断系统
  • 1-知识图谱—知识图谱表示与建模:给知识 “搭框架”,让每句话都有条理
  • Java学习第一百一十一部分——Jenkins(二)
  • 开源流媒体服务器ZLMediaKit 的Java Api实现的Java版ZLMediaKit流媒体服务器-二开视频对话
  • 周鸿祎:AI 时代安全智能体,能否重塑数字安全格局?
  • 【数据库】Oracle学习笔记整理之一:ORACLE的核心组成部分
  • 亚矩阵云手机:解锁 Shopee/Lazada 东南亚电商运营“通关密码
  • Cortex-M MCU 默认的分散加载文件分析
  • CSS高频属性速查指南
  • SG105 Pro 网管交换机的3种VLAN配置
  • Uniapp生物识别(SOTER)
  • 什么是逻辑外键?我们要怎么实现逻辑外键?
  • 【C++详解】STL-set和map的介绍和使用样例、pair类型介绍、序列式容器和关联式容器
  • sqli-labs靶场less40-less45
  • uniapp 通用地磅称重系统手机端
  • 生成网站sitemap.xml地图教程
  • android 设置字体样式
  • QT----QAxObject在子线程中调用,发现excel指针为空
  • NCD57080CDR2G 安森美onsemi 通用驱动器, SOIC, 8针, 20V电源, 8 A输出NCD57080CDR2电流隔离式栅极驱动器
  • Excel制作尖刀图,直观展示业绩涨跌
  • 【Excel】通过Index函数向下拖动单元格并【重复引用/循环引用】数据源
  • Unity模型显示在UI上
  • mysql 8递归查询
  • AMD二季度净利润同比下降31%
  • 企业级建模平台Sparx EA的云服务实现全域架构协同
  • imx6ull-驱动开发篇11——gpio子系统
  • django permission_classes = [AllowAny] 如何限制到具体接口