【MyDB】7-客户端服务端通信之3-Client的实现

发布于:2025-03-22 ⋅ 阅读:(21) ⋅ 点赞:(0)

【MyDB】7-客户端服务端通信之3-Client的实现

前言

Client的实现
Client类中实现了execute,核心在于接收字节数组并封装成为Package,之后通过RoundTrip类向服务器发送消息,返回服务端返回的Package中的Data
RoundTripper类:向Server发送请求,并接收server的响应
Shell则接收命令行传来的命令,通过调用Clent中的execute,让后端执行命令并得到返回的结果。
Launcher:客户端的启动入口,启动Shell并调用shell的run方法,监听命令行输入的命令

客户端连接服务器的过程,也是背板。客户端有一个简单的 Shell,实际上只是读入用户的输入,并调用 Client.execute()。

public byte[] execute(byte[] stat) throws Exception {
    Package pkg = new Package(stat, null);
    Package resPkg = rt.roundTrip(pkg);
    if(resPkg.getErr() != null) {
        throw resPkg.getErr();
    }
    return resPkg.getData();
}

RoundTripper 类实际上实现了单次收发动作:

public Package roundTrip(Package pkg) throws Exception {
    packager.send(pkg);
    return packager.receive();
}

Launcher

最后附上客户端的启动入口,很简单,把 Shell run 起来即可:

public class Launcher {
    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("127.0.0.1", 9999);
        Encoder e = new Encoder();
        Transporter t = new Transporter(socket);
        Packager packager = new Packager(t, e);

        Client client = new Client(packager);
        Shell shell = new Shell(client);
        shell.run();
    }
}