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

目录

目的

第一步

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值