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

目录

目的

第一步

编写Server(服务器)

第二步

创建Server的各类参数

第三步

实现具体的Server内容

 第四步

编写Client(客户端)

实现具体的Client内容

扫描二维码关注公众号,回复: 17052742 查看本文章

总流程

总代码

源码下载


目的

我们编写一个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

猜你喜欢

转载自blog.csdn.net/qq_62718027/article/details/131368419