• 【网络编程通关之路】 Udp 基础回显服务器(Java实现)及你不知道知识原理详解 ! ! !

【网络编程通关之路】 Udp 基础回显服务器(Java实现)及你不知道知识原理详解 ! ! !

2025-04-28 09:00:06 0 阅读

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

引言

在这个信息爆炸的时代,数据传输的速度和效率比以往任何时候都更加重要。想象一下,你正在观看一场在线直播的体育赛事,突然画面卡顿,数据包丢失——这可能是由于TCP协议的重传机制导致的延迟。

但如果你使用的是 UDP,情况可能会完全不同。UDP,即用户数据报协议,以其轻量级和低延迟的特性,在网络编程中扮演着重要角色。本文将深入探讨UDP的工作原理,以及它如何为现代网络通信带来革命性的变化。

目录

  1. Udp与Tcp 协议

  2. Udp服务器的实现过程及原理

  3. Udp客户端的实现过程及原理

  4. 回显服务器的原理剖析及扩展字典服务器功能

一. Udp 与 Tcp 协议

1. Udp 与 Tcp 的初识

Udp 和 Tcp 都是 Tcp / IP 五层协议中的 第四层: 传输层 , 主要提供在不同主机上提供进程和进程的 传输服务 , 主要还是关注传输的 起点和终点

2. Udp 的特点 和 Tcp的特点

Udp: 无连接, 不可靠, 面向 数据报, 全双工。

Tcp: 有连接, 可靠, 面向 字节流, 全双工

  • 连接性:连接的含义: 不是实际意义上的两根线连起来,而是一种 抽象的连接 , 就是说通信双方都保存着对方的 信息(IP地址, 端口号)

    对于Udp 来说是无连接的,也就是 没有 保存 对方信息的一种连接特性。

    对于Tcp 来说是有连接的, 也就是 保存着 对方信息 的一种连接特性。

  • 可靠性 : 对于网络通讯来说可靠 不是百分百通信, 而不丢失数据 。 可靠性的关键就在于当 数据发送错误或出现数据丢失 的情况, 是否会进行 重传 数据。

    对于 Tcp 来说, 是有 应答响应和延时重传机制的(重点内容后面文章详解), 当网络数据发生影响时, 就会进行 重传防止数据的丢失

    对于 Udp 来说, 是没有的, 当网络通信出现问题时, 就会进行直接把这段数据直接丢弃, 不会发生重传

  • 面向数据报与面向字节流: 这是两次不同协议的 传输单位 的不同

    对于Tcp 来说 , 面向字节流就等同于一个字节一个字节传输

    好比现有一堆数据, 总有二百个字节单位的数据

    如果你一个一个字节的传输, 需要传输两百次;

    如果你十个十个字节的传输, 需要传输二十次;

    如果你二十个字节的传输, 需要传输十次;

    如果你一百个字节的传输, 就需要传输两次;

    如果你二百个字节的传输, 就需要传输一次。

    对于Udp 来说, 是面向数据报的, 这里的数据报还比挖菜需要用锄头, 砍柴需要用斧头一样, 是一种 专门 为网络通信传输构造的一种 特殊结构的传输单位

    我们只需要构造好 数据报, 把需要传输的数据当 成一个整体 打包成 数据报 即可。

  • 全双工与半双工 : 双工本质上就是一种 传输的方向 , 无论是Tcp 和 Udp , 都是全双工, 其含义就是,无论对于这两种协议部署到主机上, 既可以 发送数据, 也可以 接受数据, 既可以 发送请求, 也可以 对请求做出响应 。 可以认为是一种双方向的

    而半双工就是部署好协议之后, 这个通信设备要么 只能接受数据 , 要么只能发送数据, 而 不能同时接受数据和发送数据, 是以一种 单向 的形式传输。

二. Udp服务器的实现过程及原理

1. 引入

介绍完Tcp和Udp的特点之后,下面就开始上场本篇文章的核心内容,带着小伙伴们一起实践利用 Udp 协议写一个 回显服务器程序

什么是 回显 ???

就是这个服务器响应给客户端的是 客户端自身发来的请求 , 服务器这边不做业务/ 逻辑上 的处理, 而是直接把 原请求数据 响应返回给客户端

对于Udp 来说, 如果需要进行网络通信就需要调用 系统原生api 来进行实现 , 就需要了解 系统原生api 的使用细节, 但对于Java程序猿来说, JDK早已把 api 进行封装, 封装成 两个类: DatagramSocket , DatagramPacket 。 这两个类都来自于 Java.net 这个包中。

DatagramSocket 相关方法:

上述 对 DAtagramSocket 实例化一个 Socket 对象时, 我们就是利用这个 Socket 对象 来对 网卡进行操作 , 从而进行 网络通信的必要操作

DatagramPacket 相关方法:

DatagramPacket 则是上面谈及的数据报, 每实例化一个数据报时, 就要传入对于的 byte[] 数组作为参数, 打包成 一个整体的数据报单元 进行传输。

想必小伙伴们应该还没有理解吧, 下面的原理部署和代码演示讲带着大伙熟悉这些方法的使用 💖 💖 💖 💖 💖

2. 服务器端代码演示

package network;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;


public class MyServer {

    // 定义一个 数据包插口
   private   DatagramSocket socker  = null;


   // 构造方法
    public MyServer(int port) throws SocketException {
        // 进行进程和 端口号的连接
        socker = new DatagramSocket(port);

    }


    public void start()  throws IOException {

            while(true) {
                System.out.println("服务器开始运行...");

//        打包数据包基本单位
                DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096 );

//        接受客户端发来的数据
                socker.receive(requestPacket);

                // 转为成字符串打印日志
                String request = new String(requestPacket.getData(), 0, requestPacket.getLength());


                // 执行业务逻辑并对客户端进行响应
                String response = process(request);


//              打包一组响应的数据包
//            注意这里要带上对应客户端输入的ip地址和端口号
                DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0, response.getBytes().length,
                        requestPacket.getSocketAddress());

                // 进行响应回服务器中
                socker.send(responsePacket);

                // 打印日志
                System.out.printf("[ip地址为:%s, %s,端口号为:%d, %d 客户端的的需求的为: %s, 服务器的响应为: %s]
",
                        requestPacket.getAddress(),responsePacket.getAddress(), responsePacket.getPort(),requestPacket.getPort(), request, response);
            }
    }



    // 业务逻辑的方法
    public String process(String request) {
        return request;
    }



    public static void main(String[] args) throws IOException{
        MyServer  myServer = new MyServer(9090);
        myServer.start();
    }
}

3. 服务器端代码流程讲解

对于服务器这端来说:

整体 分为五部:

  1. 实例化 DatagramSocket 并以端口号作为 构造方法的参数 建立 端口号与进程 的连接。
    // 定义一个 数据包插口
   private   DatagramSocket socker  = null;




   // 构造方法
    public MyServer(int port) throws SocketException {
        // 进行进程和 端口号的连接
        socker = new DatagramSocket(port);

    }
  1. 打包一个数据包用来 接收客户端 发来的 请求
//        打包数据包基本单位
                DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096 );

//        接受客户端发来的数据
                socker.receive(requestPacket);
  1. 处理一定的业务逻辑, 由于我们这里是 回显服务器 ,只返回请求结果成为 服务器响应的内容 即可。
     // 执行业务逻辑并对客户端进行响应
            String response = process(request);


// 业务逻辑的方法
public String process(String request) {
    return request;
}
  1. 构造一个 数据包 (带上效应的内容,长度, 以及地址) 用于把 服务器效应 发送回 服务器。
//              打包一组响应的数据包
//            注意这里要带上对应客户端输入的ip地址和端口号
                DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0, response.getBytes().length,
                        requestPacket.getSocketAddress());

                // 进行响应回服务器中
                socker.send(responsePacket);
  1. 将 客户端的 IP地址, 客户端的 端口号请求效应打印 出来。
            // 打印日志
            System.out.printf("[ip地址为:%s, %s,端口号为:%d, %d 
            客户端的的需求的为: %s, 服务器的响应为: %s]
",
                    requestPacket.getAddress(),responsePacket.getAddress(), 
responsePacket.getPort(),requestPacket.getPort(), request, response);
        }
}

鱼式疯言

  1. 由于 网络通信 需要的是 服务器和客户端 同时交互 才能展示效果,所以小伙伴们一定要记住只有两台机子以上才能完成 回显服务器 的实现。
  1. 端口号与进程 进行连接时, 需要注意的是:

    一个 进程能连接 多个 端口号

    但是 一个 端口号只能连接 一个 进程。

  1. 在获取 IP地址端口号 打印时, 就需要通过Socket 的对象:responsePacket / requestPacket , 这两个数据报中不仅包含 数据内容 , 还含有 客户端地址和端口号 等… 各种需要传递的信息。
  1. 最后还需要注意一点: Udp是 无连接 的特点, 所以当我们需要发送一个 请求/ 响应 时, 就需要在 对应的数据报 中加入 IP地址和端口号,用来指明需要发送到哪里?

三. Udp客户端的实现过程及原理

Udp 的实现 还是利用 DatagramSocketDatagramPacket 两个类来实现, 大体上的实现过程是 相似的 ,但有 细微之处不相同

下面我们来看看吧 💖 💖 💖 💖

1. 客户端的代码展示


package network;


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;


public class MyClient {

    // 服务器ip
    private String serverIp ;

    // 服务器的端口号
    private int serverPort;

    // 创建一个客户端的插口
    private  DatagramSocket clientSocket =  null;



    public MyClient(String serverIp , int serverPort) throws SocketException {

        // 对该服务器的ip 和端口号进行赋值
        this.serverIp = serverIp;
        this.serverPort = serverPort;

        // 连接时,无须指定参数
        clientSocket = new DatagramSocket();

    }

    public void start() throws IOException{
       while(true) {
           System.out.println("客户端开始运行...");
           Scanner in= new Scanner(System.in);

           System.out.print("请输入你的需求: ");
//        输入
           String request = in.next();

           // 打包成 数据量基本单位
           // 并指定 ip 和 端口号
           DatagramPacket  requestPacket =  new 
           DatagramPacket(request.getBytes(), 
           request.getBytes().length, 
InetAddress.getByName(this.serverIp), this.serverPort);

           // 发送给服务器
           clientSocket.send(requestPacket);

           // 构造一个数据包基本单位接受服务器的响应
           DatagramPacket receivePacket = new DatagramPacket(
new byte[4096],4096);

           // 开始接收
           clientSocket.receive(receivePacket);

           System.out.println("最终服务器的效应为: ");

           // 输出日志
           String receive =new String(receivePacket.getData(),
0, receivePacket.getLength());

           System.out.println(receive);
       }

    }

    public static void main(String[] args) throws IOException {
        MyClient myClient = new MyClient("127.0.0.1",9090);
        myClient.start();
    }


}


2. 客户端的代码流程讲解

  1. 先实例化一个 Socket 对象 , 并得到 需要发送 服务器IP地址和端口号

public MyClient(String serverIp , int serverPort) throws SocketException {

    // 对该服务器的ip 和端口号进行赋值
    this.serverIp = serverIp;
    this.serverPort = serverPort;

    // 连接时,无须指定参数
    clientSocket = new DatagramSocket();

}
  1. 在控制台中 输入需求 ,并打包成 数据报 (带上数据内容, IP地址, 以及端口号) , 然后利用 Socket 对象进行发送。
        System.out.println("客户端开始运行...");
           Scanner in= new Scanner(System.in);

           System.out.print("请输入你的需求: ");
//        输入
           String request = in.next();

           // 打包成 数据量基本单位
           // 并指定 ip 和 端口号
           DatagramPacket  requestPacket =  new 
           DatagramPacket(request.getBytes(), request.getBytes().length,
            InetAddress.getByName(this.serverIp), this.serverPort);

           // 发送给服务器
           clientSocket.send(requestPacket);
  1. 构造一个 数据报 用来接受服务器 返回的响应
 // 构造一个数据包基本单位接受服务器的响应
           DatagramPacket receivePacket = new DatagramPacket(
new byte[4096],4096);

           // 开始接收
           clientSocket.receive(receivePacket);
  1. 打印 服务器响应 的日志
           // 输出日志
           String receive =new String(receivePacket.getData(),
0, receivePacket.getLength());

           System.out.println(receive);

鱼式疯言

补充细节

  1. 对于客户端这端来说, 当 实例化Socket 时, 是不需要指定 端口号 的, 因为系统就根据客户端的 空缺的端口号 自动默认分配 一个端口号
    如果 程序猿来 分配分配进程 就有可能造成 某个端口号正在忙碌, 就会出现 一个端口号绑定多个进程 的情况,就会参生 BUG
  1. 由于我们传入的IP 地址是 一个字符串 , 我们就需要转换为对于的 点分十进制 的地址表示方式: InetAddress.getByName(this.serverIp)
  1. 异常 SocketException 属于 IOException子类

四. 回显服务器的原理剖析及扩展字典服务器功能

1. 回显服务器的原理剖析

具体 回显服务器 的流程小编用 图示 的方式表示啦,

  • 服务端等待客户端发送请求

  • 客户端发送以及阻塞等待

  • 返回客户端的响应

  • 整体的流程:

鱼式疯言

  1. 从构造数据报的内容,我们可以看出 Udp面向数据报 的特点
  1. 从每次发送请求,或者返回响应都需要 设定IP地址和端口号 , 可以看出 Udp 无连接需要手动设置 IP 和端口号 的特点。
  1. 从客户端 既可以发送请求又可以接收响应 , 并且 服务器既可以接收请求,发送响应 , 充分说明 Udp是 全双工传输 的特点。

关于 Udp 不可靠传输 这个特点,这是一个难点也是重点, 小编会在后面的文章中重点详细的

2. 字典服务器功能

服务器:

package network;

import java.io.IOException;
import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;





public class MyDicServer extends MyServer{

    private Map<String,String> map = new HashMap<>();

    public MyDicServer(int port) throws SocketException {
        super(port);
        map.put("cat","小猫");
        map.put("dog", "小狗");
        map.put("dusk", "小鸭");
    }

    @Override
    public String process(String request) {
        return  map.getOrDefault(request,"未知单词");
    }

    public static void main(String[] args) throws IOException {
        MyServer m = new MyDicServer(9090);
        m.start();
    }
}

客户端

 package network;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;


public class MyServer {

    // 定义一个 数据包插口
   private   DatagramSocket socker  = null;


   // 构造方法
    public MyServer(int port) throws SocketException {
        // 进行进程和 端口号的连接
        socker = new DatagramSocket(port);

    }


    public void start()  throws IOException {

            while(true) {
                System.out.println("服务器开始运行...");

//        打包数据包基本单位
                DatagramPacket requestPacket = 
                new DatagramPacket(new byte[4096],
                        4096 );

//        接受客户端发来的数据
                socker.receive(requestPacket);

                // 转为成字符串打印日志
                String request = new String(requestPacket.getData(),
                        0, requestPacket.getLength());


                // 执行业务逻辑并对客户端进行响应
                String response = process(request);


//              打包一组响应的数据包
//            注意这里要带上对应客户端输入的ip地址和端口号
                DatagramPacket responsePacket = new
                 DatagramPacket(response.getBytes(),0,
                        response.getBytes().length,
                        requestPacket.getSocketAddress());

                // 进行响应回服务器中
                socker.send(responsePacket);

                // 打印日志
                System.out.printf("[ip地址为:%s, %s,端口号为:
                %d, %d 客户端的的需求的为: %s, 服务器的响应为: %s]
",
                        
                        requestPacket.getAddress(),
                        responsePacket.getAddress(),
                        
                        responsePacket.getPort(),
                        requestPacket.getPort(),
                        
                        request, response);
            }
    }



    // 业务逻辑的方法
    public String process(String request) {
        return request;
    }



    public static void main(String[] args) throws IOException{
        MyServer  myServer = new MyServer(9090);
        myServer.start();
    }
}



字典服务器小编在这里只是作为扩展内容, 其实操作远不止这里, 至于字典服务器怎么生成的?

其实很简单, 只是在原来的基础上加入了一个 哈希表 进行返回, 即使不理解的小伙伴也无妨, 重要是理解前面Udp 的回显服务器的 实现原理 即可。

总结

  • Udp与Tcp 协议 : 主要说明的四种 UdpTcp 不同核心特点

  • Udp服务器的实现过程及原理: 先了解 实现回显服务器 Udp 的两个类, 分别是 操作网卡 进行网络通信的
    DatagramSocket 对象 与实现包装数据的 DatagramPacket 数据报。 并实现了
    服务器的代码以及流程讲解。

  • Udp客户端的实现过程及原理:实现了 Udp 的客户端代码 , 并且就客户端的特点进行了流程讲解。

  • 回显服务器的原理剖析及扩展字典服务器功能 : 从 图示的方式 进行理解回显服务器的原理, 并且扩展了 字典服务器
    的内容。

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

本文地址:https://www.vps345.com/4467.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 进程 操作系统 进程控制 Ubuntu ssh deepseek Ollama 模型联网 API CherryStudio python MCP llama 算法 opencv 自然语言处理 神经网络 语言模型 javascript 前端 chrome edge 数据库 centos oracle 关系型 安全 分布式 react.js 前端面试题 node.js 持续部署 笔记 C ubuntu 环境变量 进程地址空间 Dell R750XS 科技 ai java 人工智能 个人开发 numpy 阿里云 网络 网络安全 网络协议 harmonyos 华为 开发语言 typescript 计算机网络 macos adb IIS .net core Hosting Bundle .NET Framework vs2022 经验分享 android c++ c语言 php ollama llm http ESP32 串口服务器 YOLO 深度学习 pytorch nuxt3 vue3 sql KingBase 自动化 蓝耘科技 元生代平台工作流 ComfyUI 银河麒麟 kylin v10 麒麟 v10 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse spring boot websocket docker 实时音视频 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 pycharm conda pillow gitlab kubernetes 容器 学习方法 程序人生 tcp/ip rust nginx 监控 自动化运维 DeepSeek-R1 API接口 spring json html5 firefox django flask web3.py golang github 创意 社区 RTSP xop RTP RTSPServer 推流 视频 kvm 无桌面 命令行 ecm bpm zotero WebDAV 同步失败 代理模式 华为云 物联网 云原生 AIGC 后端 springsecurity6 oauth2 授权服务器 前后端分离 uni-app udp unity redis 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 eureka web安全 vim windows 集成学习 集成测试 prometheus 监控k8s集群 集群内prometheus 架构 arm Cursor html FunASR ASR 佛山戴尔服务器维修 佛山三水服务器维修 android studio 交互 go file server http server web server vscode 代码调试 ipdb 远程连接 rdp 实验 远程工作 ssl 消息队列 tomcat Linux PID mysql mongodb pygame 小游戏 五子棋 UOS 统信操作系统 yum 编辑器 oceanbase rc.local 开机自启 systemd 麒麟 机器人 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 chatgpt 大模型 llama3 Chatglm 开源大模型 大数据 媒体 机器学习 kylin 深度优先 图论 并集查找 换根法 树上倍增 AI MNN DeepSeek Qwen pppoe radius microsoft arm开发 僵尸进程 DeepSeek行业应用 Heroku 网站部署 xss react next.js 部署 部署next.js AI编程 AI agent vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 jenkins gitee java-ee bash 小程序 JAVA IDEA Java YOLOv8 NPU Atlas800 A300I pro 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP flash-attention 报错 googlecloud 弹性计算 虚拟化 KVM 计算虚拟化 弹性裸金属 idm 面试 向日葵 vscode 1.86 宝塔面板 同步 备份 建站 安全威胁分析 Reactor 设计模式 性能优化 C++ 目标检测 计算机视觉 豆瓣 追剧助手 迅雷 nas 微信 内存 unity3d postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 LDAP https jvm aws 服务器繁忙 备选 网站 api 调用 示例 银河麒麟桌面操作系统 Kylin OS 国产化 Agent IIS服务器 IIS性能 日志监控 maven intellij idea 腾讯云 ide 运维开发 qt dubbo 多线程服务器 TCP服务器 qt项目 qt项目实战 qt教程 openssl 密码学 MQTT mosquitto 智能路由器 外网访问 内网穿透 端口映射 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 sqlite 爬虫 数据集 spring cloud intellij-idea kafka hibernate shell 根服务器 debian jdk ffmpeg 音视频 AI大模型 大模型入门 Deepseek 大模型教程 Dify sqlserver Linux 国产操作系统 ukui 麒麟kylinos openeuler 微服务 统信 虚拟机安装 游戏程序 git 学习 医疗APP开发 app开发 apache 孤岛惊魂4 恒源云 tcp oneapi open webui 博客 权限 华为认证 网络工程师 交换机 开源 Linux网络编程 电脑 Headless Linux 远程登录 telnet pdf asp.net大文件上传 asp.net大文件上传下载 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 live555 rtsp rtp visualstudio k8s c# zookeeper fpga开发 armbian u-boot ios flutter 嵌入式硬件 驱动开发 硬件工程 嵌入式实习 WSL win11 无法解析服务器的名称或地址 URL ftp Cline Docker Compose docker compose docker-compose ecmascript nextjs reactjs 单片机 搜索引擎 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 MI300x TRAE openwrt Docker Hub docker pull 镜像源 daemon.json ux 多线程 svn stm32 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 开发环境 SSL证书 Python 网络编程 聊天服务器 套接字 TCP 客户端 Socket 能力提升 面试宝典 技术 IT信息化 ci/cd 源码剖析 rtsp实现步骤 流媒体开发 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn 银河麒麟操作系统 rpc 远程过程调用 Windows环境 直播推流 virtualenv Hyper-V WinRM TrustedHosts excel 微信公众平台 C语言 联想开天P90Z装win10 jmeter 软件测试 matlab asi_bench mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 统信UOS bonding 链路聚合 3d 数学建模 cursor 网络结构图 MCP server C/S LLM 安全架构 游戏服务器 Minecraft ddos 重启 排查 系统重启 日志 原因 agi ansible playbook gpu算力 H3C gcc c jupyter 虚拟机 dell服务器 图形化界面 硬件架构 系统架构 iventoy VmWare OpenEuler css3 XFS xfs文件系统损坏 I_O error es 游戏引擎 抗锯齿 xcode 实习 磁盘监控 iot 合成模型 扩散模型 图像生成 zabbix 系统安全 openEuler 鸿蒙 鸿蒙系统 elasticsearch 程序员 无人机 其他 jar 服务器主板 AI芯片 信息与通信 ruoyi 前端框架 hadoop 我的世界服务器搭建 asm 金仓数据库 2025 征文 数据库平替用金仓 负载均衡 王者荣耀 Wi-Fi 超融合 minio Spring Security DevEco Studio HarmonyOS OpenHarmony 真机调试 IMX317 MIPI H265 VCU 我的世界 我的世界联机 数码 微信小程序 虚拟局域网 jetty undertow tidb GLIBC sdkman 缓存 华为od ISO镜像作为本地源 postgresql 云电竞 云电脑 todesk 视觉检测 proxy模式 BMC IPMI 带外管理 5G 3GPP 卫星通信 职场和发展 db ip cuda cudnn nvidia ui prometheus数据采集 prometheus数据模型 prometheus特点 命令 unix dify 相机 智能手机 NAS Termux Samba 显卡驱动 软件工程 rabbitmq ruby express Erlang OTP gen_server 热代码交换 事务语义 tcpdump 实战案例 GPU hugo devops 远程桌面 gaussdb Python基础 Python教程 Python技巧 mysql离线安装 ubuntu22.04 mysql8.0 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 源码 毕业设计 课程设计 策略模式 单例模式 pip AI写作 AI作画 webgl QQ 聊天室 环境配置 Claude 测试工具 ocr 考研 数据结构 跨域 onlyoffice 在线office 思科模拟器 思科 Cisco IM即时通讯 企业微信 剪切板对通 HTML FORMAT AnythingLLM AnythingLLM安装 虚幻 线程 hive Hive环境搭建 hive3环境 Hive远程模式 ollama下载加速 kind muduo QT 5.12.12 QT开发环境 Ubuntu18.04 个人博客 X11 Xming 双系统 GRUB引导 Linux技巧 docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos KylinV10 麒麟操作系统 Vmware 银河麒麟服务器操作系统 系统激活 springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 算力 visual studio code Radius P2P HDLC k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm Windows chrome 浏览器下载 chrome 下载安装 mac 谷歌浏览器下载 can 线程池 EMQX 通信协议 CUDA PyTorch GCC aarch64 编译安装 HPC HAProxy 技能大赛 rclone AList webdav fnOS 1024程序员节 epoll iBMC UltraISO windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 MySql 图像处理 远程 执行 sshpass 操作 魔百盒刷机 移动魔百盒 机顶盒ROM linux上传下载 阻塞队列 生产者消费者模型 服务器崩坏原因 健康医疗 互联网医院 USB转串口 CH340 飞牛NAS 飞牛OS MacBook Pro laravel Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 vue css less matplotlib wps 安卓 grafana 直流充电桩 充电桩 邮件APP 免费软件 junit SEO Ubuntu Server Ubuntu 22.04.5 漏洞 ssh远程登录 显示管理器 lightdm gdm 树莓派 VNC fd 文件描述符 网络穿透 云服务器 浏览器开发 AI浏览器 linux安装配置 safari Mac 系统 Nuxt.js webrtc SSH Xterminal 历史版本 下载 安装 rnn 压力测试 netty p2p Linux24.04 deepin okhttp CORS 游戏机 etl etcd 数据安全 RBAC wireshark 嵌入式 linux驱动开发 Netty 即时通信 NIO HTTP 服务器控制 ESP32 DeepSeek seatunnel yaml Ultralytics 可视化 deepseek r1 AD域 反向代理 致远OA OA服务器 服务器磁盘扩容 AutoDL 开机自启动 make命令 makefile文件 HCIE 数通 rag ragflow ragflow 源码启动 技术共享 ESXi iphone ue4 着色器 ue5 vasp安装 查询数据库服务IP地址 SQL Server 加解密 Yakit yaklang 语音识别 eclipse gateway Clion Nova ResharperC++引擎 Centos7 远程开发 HarmonyOS Next 业界资讯 anaconda 模拟退火算法 mamba Vmamba 镜像 code-server list 模拟实现 SVN Server tortoise svn r语言 数据挖掘 数据可视化 数据分析 计算机 uv composer AISphereButler kamailio sip VoIP 大数据平台 Qwen2.5-coder 离线部署 navicat 银河麒麟高级服务器 外接硬盘 Kylin Linux的基础指令 中间件 cocoapods gradle ROS 自动驾驶 threejs 3D lio-sam SLAM SenseVoice 回显服务器 UDP的API使用 HiCar CarLife+ CarPlay QT RK3588 vSphere vCenter Node-Red 编程工具 流编程 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 计算机外设 Dell HPE 联想 浪潮 yolov8 信号处理 rust腐蚀 npm MacOS录屏软件 框架搭建 .net web cnn GoogLeNet springboot 升级 CVE-2024-7347 VPS .net mvc断点续传 温湿度数据上传到服务器 Arduino HTTP 需求分析 规格说明书 程序 编程 性能分析 矩阵 big data 实时互动 服务器管理 配置教程 服务器安装 网站管理 雨云 NPS 飞书 web3 bcompare Beyond Compare 模拟器 教程 linux 命令 sed 命令 autodl 软件定义数据中心 sddc n8n 工作流 workflow IPMITOOL 硬件管理 opcua opcda KEPServer安装 大模型微调 工业4.0 IMM rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK echarts 可信计算技术 网络攻击模型 传统数据库升级 银行 大语言模型 LLMs 单一职责原则 hexo 移动云 云服务 token sas 鲲鹏 小智AI服务端 xiaozhi TTS FTP 服务器 IPv4 子网掩码 公网IP 私有IP SSH 密钥生成 SSH 公钥 私钥 生成 wsl gitea iis ShenTong 中兴光猫 换光猫 网络桥接 自己换光猫 僵尸世界大战 游戏服务器搭建 ArkUI 多端开发 智慧分发 应用生态 鸿蒙OS iperf3 带宽测试 nfs Kali SSL 域名 rsyslog Anolis nginx安装 环境安装 linux插件下载 apt Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 v10 软件 毕昇JDK webstorm Trae IDE AI 原生集成开发环境 Trae AI redhat mcu 单元测试 功能测试 selenium SWAT 配置文件 服务管理 网络共享 CPU 主板 电源 网卡 黑客技术 项目部署到linux服务器 项目部署过程 本地部署 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 半虚拟化 硬件虚拟化 Hypervisor 换源 国内源 Debian EasyConnect Kali Linux 黑客 渗透测试 信息收集 micropython esp32 mqtt .netcore nac 802.1 portal crosstool-ng AI-native Docker Desktop 网工 opensearch helm ssrf 失效的访问控制 pgpool Typore wsl2 vscode1.86 1.86版本 ssh远程连接 田俊楠 SSE open Euler dde tensorflow LLM Web APP Streamlit bug 文件系统 路径解析 selete 高级IO 多层架构 解耦 outlook 软链接 硬链接 WebUI DeepSeek V3 TrinityCore 魔兽世界 sysctl.conf vm.nr_hugepages adobe elk W5500 OLED u8g2 chfs ubuntu 16.04 log4j odoo 服务器动作 Server action 交叉编译 微信分享 Image wxopensdk 环境迁移 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 视频编解码 流水线 脚本式流水线 efficientVIT YOLOv8替换主干网络 TOLOv8 Ubuntu 24.04.1 轻量级服务器 python3.11 dash 正则表达式 g++ g++13 群晖 文件分享 毕设 Linux环境 相差8小时 UTC 时间 远程控制 远程看看 远程协助 sentinel 边缘计算 信号 Xinference RAGFlow cpu 实时 使用 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 低代码 WSL2 小艺 Pura X 三级等保 服务器审计日志备份 FTP服务器 jina VMware安装Ubuntu Ubuntu安装k8s prompt OD机试真题 华为OD机试真题 服务器能耗统计 frp 腾讯云大模型知识引擎 dns ipython cd 目录切换 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 智能音箱 智能家居 多个客户端访问 IO多路复用 TCP相关API bootstrap 软考 昇腾 npu tailscale derp derper 中转 VR手套 数据手套 动捕手套 动捕数据手套 线性代数 电商平台 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors XCC Lenovo 繁忙 解决办法 替代网站 汇总推荐 AI推理 CDN dba Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 烟花代码 烟花 元旦 xpath定位元素 windows日志 dity make DOIT 四博智联 7z 防火墙 NAT转发 NAT Server Unity Dedicated Server Host Client 无头主机 stm32项目 embedding 输入法 av1 电视盒子 freebsd glibc 常用命令 文本命令 目录命令 thingsboard VMware安装mocOS VMware macOS系统安装 LORA NLP ardunio BLE 端口测试 安装教程 GPU环境配置 Ubuntu22 Anaconda安装 iDRAC R720xd 命名管道 客户端与服务端通信 ArcTS 登录 ArcUI GridItem 服务器配置 arkUI 服务网格 istio js Unity插件 Ubuntu共享文件夹 共享目录 Linux共享文件夹 firewall ceph chrome devtools chromedriver camera Arduino 电子信息 minicom 串口调试工具 TrueLicense 车载系统 序列化反序列化 生物信息学 neo4j 知识图谱 Google pay Apple pay 程序员创富 nlp Jellyfin LInux UDP 鸿蒙开发 移动开发 语法 DNS RAID RAID技术 磁盘 存储 黑苹果 服务器时间 sequoiaDB 具身智能 强化学习 游戏开发 dock 加速 政务 分布式系统 监控运维 Prometheus Grafana 捆绑 链接 谷歌浏览器 youtube google gmail docker命令大全 图形渲染 硬件 设备 PCI-Express VMware创建虚拟机 gpt-3 文心一言 搭建个人相关服务器 sqlite3 音乐服务器 Navidrome 音流 CentOS Stream CentOS ping++ alias unalias 别名 信创 信创终端 中科方德 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 大模型推理 大模型学习 混合开发 JDK regedit 开机启动 rustdesk 人工智能生成内容 金融 wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 网络用户购物行为分析可视化平台 大数据毕业设计 dns是什么 如何设置电脑dns dns应该如何设置 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 蓝桥杯 本地化部署 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 centos-root /dev/mapper yum clean all df -h / du -sh 大模型面经 京东云 基础入门 架构与原理 测试用例 拓扑图 私有化 ubuntu20.04 开机黑屏 Redis Desktop 玩机技巧 软件分享 软件图标 离线部署dify 基础环境 链表 多路转接 eNSP 企业网络规划 华为eNSP 网络规划 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 项目部署 Deepseek-R1 私有化部署 推理模型 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 欧标 OCPP edge浏览器 物联网开发 lua clickhouse vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 沙盒 word 社交电子 SSH 服务 SSH Server OpenSSH Server 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 harmonyOS面试题 langchain 域名服务 DHCP 符号链接 配置 USB网络共享 软件需求 音乐库 飞牛 实用教程 Playwright 自动化测试 软负载 多进程 ssh漏洞 ssh9.9p2 CVE-2025-23419 midjourney vmware 卡死 裸金属服务器 弹性裸金属服务器 AI代码编辑器 YOLOv12 NFS Cookie 状态管理的 UDP 服务器 Arduino RTOS mariadb 粘包问题 Windsurf seleium ip命令 新增网卡 新增IP 启动网卡 智能硬件 iftop 网络流量监控 MS Materials EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 执法记录仪 智能安全帽 smarteye perf SysBench 基准测试 流量运营 PX4 DBeaver 数据仓库 kerberos 影刀 #影刀RPA# mybatis 产测工具框架 IMX6ULL 管理框架 系统开发 binder framework 源码环境 flink openstack Xen 信息可视化 网页设计 华为机试 数据库系统 C# MQTTS 双向认证 emqx TCP协议 llama.cpp 开发 CLion 做raid 装系统 milvus Attention remote-ssh figma Logstash 日志采集 x64 SIGSEGV xmm0 火绒安全 firewalld 内网服务器 内网代理 内网通信 AI Agent 字节智能运维 串口驱动 CH341 uart 485 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 curl wget bat RAGFLOW RAG 检索增强生成 文档解析 大模型垂直应用 端口 查看 ss 状态模式 trea idea 剧本 docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 uniapp ubuntu24.04.1 RTMP 应用层 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 VS Code OpenSSH 自动化任务管理 easyui rpa docker run 数据卷挂载 交互模式 fast 大模型应用 VSCode 知识库 本地知识库部署 DeepSeek R1 模型 yum源切换 更换国内yum源 kali 共享文件夹 springcloud AD 域管理 spark HistoryServer Spark YARN jobhistory Linux find grep 嵌入式Linux IPC 网站搭建 serv00 键盘 grub 版本升级 扩容 微信开放平台 微信公众号配置 EMUI 回退 降级 飞牛nas fnos gnu wpf 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 代理服务器 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 自定义客户端 SAS VLAN 企业网络 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 服务器部署ai模型 linux环境变量 vr 嵌入式系统开发 ai工具 java-rocketmq ldap 灵办AI minecraft GIS 遥感 WebGIS 大大通 第三代半导体 碳化硅 流式接口 conda配置 conda镜像源 李心怡 pyqt 元服务 应用上架 分布式训练 Kylin-Server Linux的权限 内网环境 h.264 远程服务 RustDesk自建服务器 rustdesk服务器 docker rustdesk cpp-httplib WebRTC gpt 热榜 win服务器架设 windows server 迁移指南 trae 大模型部署 docker部署Python 网卡的名称修改 eth0 ens33 xrdp SRS 流媒体 直播 deekseek 办公自动化 自动化生成 pdf教程 ABAP 性能测试 产品经理 CrewAI 雨云服务器 MDK 嵌入式开发工具 论文笔记 sublime text arcgis 崖山数据库 YashanDB 存储维护 NetApp存储 EMC存储 DenseNet 分析解读 深度求索 私域 pyautogui 风扇控制软件 rocketmq 运维监控 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR 代理 swoole 匿名管道 bot Docker 虚幻引擎 risc-v leetcode 推荐算法 DocFlow MacMini 迷你主机 mini Apple 宠物 免费学习 宠物领养 宠物平台 ubuntu24 vivado24 k8s集群资源管理 云原生开发 Invalid Host allowedHosts 北亚数据恢复 oracle数据恢复 visual studio 自动化编程 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 干货分享 黑客工具 密码爆破 西门子PLC 通讯 ai小智 语音助手 ai小智配网 ai小智教程 esp32语音助手 diy语音助手 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 triton 模型分析 压测 ECS Ark-TS语言 ros2 moveit 机器人运动 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 宕机切换 服务器宕机 hosts wsgiref Web 服务器网关接口 skynet transformer Open WebUI cmos IO模型 searxng sonoma 自动更新 网络药理学 生信 PPI String Cytoscape CytoHubba ros RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 xshell termius iterm2 PVE rime 数据库开发 database 阿里云ECS deep learning keepalived