让ServerSocket知道要侦听的数据

时间:2015-04-19 13:41:25

标签: java sockets client server serversocket

我正在使用一个简单的客户端/服务器登录系统,而且我无法让我的服务器监听客户端发送的正确数据。在我的客户端上,我有方法sendRegistrationData()和sendLoginData(),在我的服务器上我有waitForRegistrationData()和waitForLoginData()。这些方法中的代码很好并且可以执行他们应该执行的操作,但是我的服务器似乎无法告诉何时等待注册或登录数据,并且要么通过两种等待方法运行,要么转到第一个,忽略了第二个。

例如,我有这个方法;

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

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

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

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

昨晚工作正常但由于某种原因停止了工作,当我尝试一旦启动客户端就登录时,它只返回null,因为服务器似乎没有达到waitForLoginData,因为waitForRegistrationData在上面它,或者我在猜测。

如何让我的服务器知道是否要收听注册或登录数据? here's an Imgur链接显示我的客户端/服务器在昨晚按预期工作时正在运行。现在,如果我试图进行"登录而不注册"如图所示,它会引起我刚刚说过的问题,即服务器只是在监听登录数据。

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

1 个答案:

答案 0 :(得分:1)

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