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

您所在的位置:网站首页 怎么创建一个网址的快捷方式 如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!)

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

2023-06-25 16:43| 来源: 网络整理| 查看: 265

目录

目的

第一步

编写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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3