让 ServerSocket 知道要监听什么数据

Getting the ServerSocket to know what data to listen for

我正在开发一个简单的客户端/服务器登录系统,但我无法让我的服务器侦听客户端发送的正确数据。在我的客户端上,我有方法 sendRegistrationData() 和 sendLoginData(),在我的服务器上,我有 waitForRegistrationData() 和 waitForLoginData()。这些方法中的代码很好,可以做它们应该做的事情,但我的服务器似乎无法判断何时等待注册或登录数据,要么运行两种等待方法,要么转到第一个并忽略第二个

比如我有这个方法;

private void waitForData() {
    setupClient();
    waitForRegistrationData();
    waitForLoginData();
}

这样做是处理注册数据,然后处理登录数据,即使我只发送了登录数据。所以我想尝试解决这个问题,我会为 sendRegistrationData 和 sendLoginData 向服务器写入一个 int,例如 clientOut.writeInt(1) 用于 sendRegistrationData 和 clientOut.writeInt(2) 用于 sendLoginData,然后服务器-我会做一个像下面这样的 int 来告诉服务器如何区分两者;

private void waitForData() {
    setupClient();
    try {
        if (serverIn.readInt() == 1)
            waitForRegistrationData();

        if (serverIn.readInt() == 2)
            waitForLoginData();
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }
}

这昨晚工作正常,但由于某种原因停止工作,当我一启动客户端就尝试登录时,它只是 returns null,因为服务器似乎没有到达 waitForLoginData因为 waitForRegistrationData 在上面,所以我猜是这样。

如何让我的服务器知道是否监听注册或登录数据? here's an Imgur link 显示我的客户端/服务器昨晚按预期工作时的运行情况。现在,如果我尝试执行该图片中看到的 "Login without register",它会导致我刚才所说的问题,即服务器不侦听登录数据。

希望我已经充分解释了我的问题,以便有人知道我在说什么。我发现很难解释这个问题。谢谢

您应该调用 readInt() 一次,并可能在 switch 语句中使用结果。目前,当只发送了一个整数时,您正在尝试使用两个整数。