如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!)

news2024/11/18 13:32:39

目录

目的

第一步

编写Server(服务器)

第二步

创建Server的各类参数

第三步

实现具体的Server内容

 第四步

编写Client(客户端)

实现具体的Client内容

总流程

总代码

源码下载


目的

我们编写一个udp 版本的 echo server 和 echo client

实现在自己电脑上通过客户端发送任何消息之后,服务端接送该消息

并不做任何处理原封不动返回该内容

第一步

创建两个java文件,命令为Server和Client

编写Server(服务器)

我们首先得清楚,在网络之中,肯定是服务器先启动,只有服务器先启动了我们的客户端才能给服务器发送指令

所以让我们先进入Server.java文件,开始我们的编写代码

第二步

创建Server的各类参数

首先操作网络,我们需要Java为我们提供的一个名字叫做DatagramSocket的包

然后在创建一个对象,给这个对象实例化的时候,我们需要手动为其配置一个端口

第三步

实现具体的Server内容

 记住在网络之中

每一步传输/接收操作都需要重新打包

只要记住了这一点其实就没什么了,下面是每个代码的具体含义

 第四步

编写Client(客户端)

实现具体的Client内容

首先我们还是,创建一个Socket来操作数据

这里看一下两者的不同

记住在网络之中

每一步传输/接收操作都需要重新打包

只要记住了这一点其实就没什么了,下面是每个代码的具体含义

总流程

让我们再来理一遍总体的流程

1.服务器创建一个DatagramPacket的包,等待客户端的消息传递(没有消息则阻塞)

2.客户端通过对应的端口号,附上自己的ip地址,把消息打包发送给服务器让他处理消息

3.服务器接受消息包,并且对消息进行处理,将处理完成的消息重新打包,以ip地址返回给客户端

4.客户端创建一个新的包,接受到了这个处理完成的数据

总代码

Server

import java.net.DatagramSocket;
import java.net.SocketException;

public class MyServer {
    private DatagramSocket socket = null;
    MyServer(int port) throws SocketException {
        this.socket = new DatagramSocket(port);
    }
    public void start() throws IOException {
        System.out.println("服务器启动!");
        while(true){
            DatagramPacket requestPacket = new DatagramPacket(new byte[4096],4096);
            socket.receive(requestPacket);
            String request = new String(requestPacket.getData(),0, requestPacket.getLength());
            String response = process(request);
            DatagramPacket responsePacket = new DatagramPacket(response.getBytes(),0,response.length(),
                    requestPacket.getSocketAddress());
            socket.send(responsePacket);
            System.out.printf("[%s:%d] req: %s, resp: %s\n", requestPacket.getAddress().toString(),
                    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();
    }
}

Client

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class MyClient {
    DatagramSocket socket = null;
    int server_port;
    String server_ip;
    MyClient(String server_ip,int server_port) throws SocketException {
        this.socket = new DatagramSocket();
        this.server_ip = server_ip;
        this.server_port = server_port;
    }
    public void start() throws IOException {
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("->");
            String request = sc.next();
            DatagramPacket requestPacket = new DatagramPacket(request.getBytes(),0,request.length(),
                    InetAddress.getByName(server_ip),server_port);
            socket.send(requestPacket);
            DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);
            socket.receive(responsePacket);
            String response = new String(responsePacket.getData(),0,responsePacket.getLength());
            System.out.printf("req: %s, resp: %s\n", request, response);

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

源码下载

https://download.csdn.net/download/qq_62718027/87945837

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/681822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

open【部署、使用教程】

目录 【1】创建证书 【2】安装openVPN-Server端并配置 【3】将证书移动到相对路径 【4】开启内核转发功能,否则会无法启动openVPN 【5】启动服务,加入开机自启 【6】启动后服务端会生成一个tun0的虚拟网卡,用于不同网段之间相互通信 【…

VUE2.0集成 Markdown 编辑器

Markdown编辑器的使用 这是一款基于Vue的markdown编辑器。既可以用来编辑Markdown语法,又可以用来解析 效果图,mavonEditor实现了Markdown集成 Markdown是一种标记语言,相较于word文档更加清晰方便,适合进行笔记等。将Markdown集成进入自己项…

Matlab使用S函数

什么是S函数? S-函数是系统函数(System Function)的简称,在 Simulink 中用非图形化的方式来描述一个模块。一个完整的S-函数结构体系包含了描述一个动态系统所需要的全部能力。使用S-函数用户可以向 Simulink 模型中添加自己的模块…

【PCB专题】Allegro中设置泪滴

PCB绘制完成后有时按需要对PCB进行添加泪滴的操作是非常必要的。 添加泪滴的作用主要是: 信号传输时平滑阻抗,减少阻抗的急剧跳变,避免高频信号传输时由于线宽突然变小而造成反射。 焊接时可以保护焊盘,避免多次焊接时焊盘的脱落,生产时可以避免蚀刻不均,以及过孔偏位出…

一键安装和导出当前Python项目的依赖包总结

创建python环境,配置一个python运行项目。在项目可以运行的环境下,导出该项目所依赖包到一个requirements.txt文档中。在另一个纯净环境中,快速批量安装项目所依赖的包,便于快速进行项目迁移 一、导出当前Python项目的依赖包1、方…

【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问

目录 一、虚拟头节点二、数组的随机访问三、动态数组、链表复杂度分析四、动态数组 add(E element) 复杂度分析五、动态数组的缩容 一、虚拟头节点 🌼 为了让代码更加精简,统一所有节点的处理逻辑,可以在最前面增加一个虚拟的头节点&#xf…

2023 年最佳 C++ IDE

文章目录 前言1. Visual Studio2. Code::Blocks3. CLion4. Eclipse CDT(C/C 开发工具)5. CodeLite6. Apache NetBeans7. Qt Creator8. Dev C9. C Builder10. Xcode11. GNAT Programming Studio12. Kite总结 前言 要跟踪极佳 IDE(集成开发环境…

嵌入式系统复习要点

目录 1、嵌入式系统的核心部分主要由硬件和软件两部分组成: 2、嵌入式系统硬件: 3、嵌入式处理器从体系上分类,可以分为冯诺依曼结构和哈佛结构两种: 4、几类常见的嵌入式处理器类型: 5、MCU组成结构:…

chatgpt赋能python:介绍:Python经典小游戏合集

介绍:Python经典小游戏合集 作为一门简洁易学、受到广泛喜爱的编程语言,Python已经在各个领域中得到了广泛应用,包括游戏开发。在这篇文章中,我们将为您介绍一些Python编程中的经典小游戏,让您感受到Python的多功能性…

idea乱码的相关问题

idea控制台乱码(即:tomacat等启动时的乱码) 第一步: 控制台tomcat启动信息乱码解决(红色字体) 1 在本地 tomcat 的配置文件中找到 logging.properties 文件设置日志输出的编码为 UTF-8 追加的配置信息为…

【Android复习笔记】Handler机制(一)

从 Android 初学者常见的一个错误开始: 导致这个错误的代码通常长下面这样: new Thread(){@Overridepublic void run() {new Handler(); } }.

chatgpt赋能python:Python编程中常见的问题和解决方案

Python编程中常见的问题和解决方案 Python作为一门高级编程语言,广泛用于数据分析、人工智能、Web开发等领域,然而在实际应用中我们不可避免地会遇到许多问题。在本文中,我们将探讨一些常见的Python编程问题以及解决方案。 1. 编码问题 Py…

碰撞检测算法详述

算法的分类 目录 一、基于空间域的碰撞检测算法分类 1. 基于图像空间的碰撞算法 2.基于几何空间的碰撞检测算法 (1)基于空间剖分算法 (2)裁剪扫掠法 (3)基于距离场的算法 (4)…

ModaHub魔搭社区:向量数据库的工作原理

目录 1. 为什么需要向量数据库 1)CPU 工作原理 2)GPU 工作原理 3)二者的差异 4)总结 5)大模型的工作原理 学习 推理 1. 为什么需要向量数据库 向量数据库这一概念随着黄仁勋的演讲火爆了之后,不少…

如何使用upupw搭建服务器,并映射外网访问

作为计算机行业从业人员,相信很多人都接触并使用过phpstudy等类似环境集成包,着对于upupw就比较好理解了。UPUPW绿色服务器平台是Windows下很有特色的一款免费服务器PHP套件,UPUPW PHP套件简化了PHP环境搭建步骤,一个压缩包解压到…

chatgpt赋能python:Python经典游戏:从命令行到桌面

Python经典游戏:从命令行到桌面 Python是一个热门的编程语言,尤其在编写游戏方面表现出色。Python允许开发人员使用简单的语法和丰富的库编写高效率的游戏。在这篇文章中,我们将介绍Python的一些经典游戏,包括简单的命令行游戏和…

GithubAction的使用-简单易懂

一、Github Action简介 github Action (工作流),简单理解就是自动化部署、测试。也就是之前人工手动部署变为现在由机器(服务器)自动部署、测试了。 二、对github Action(工作流)的使用 首先…

〖编程初学者的自我修养 - 满分面试篇①〗- 面试之前需要做的「长期准备工作」

简介:应 850 小伙伴要求, 无论你是迷茫的在校生还是已经就业的老司机,该专栏都值得你订阅,它会让你成就更好的自己!说明:该文属于 编程初学者的自我修养 专栏,购买任意白宝书体系化专栏可加入易…

SpringBoot 解决跨站脚本漏洞(XSS)问题

一、问题背景 使用 SpringBoot 的项目出现了跨站脚本漏洞&#xff08;XSS&#xff09;问题。 二、解决方案 步骤如下&#xff1a; 1、添加maven依赖 在 pom.xml 文件中&#xff0c;增加如下依赖&#xff1a; <dependency><groupId>org.apache.tomcat</group…

莫兰指数P值,Z值分析

仔细看完下面两个链接绝对可以明白。写的非常清晰。 白话空间统计之四&#xff1a;P值和Z得分&#xff08;中&#xff09; 白话空间统计之四&#xff1a;P值和Z得分&#xff08;下&#xff09; 个人理解&#xff1a;P值决定了数据有没有显著性&#xff0c;数据能不能用的问题…