0

我正在构建一个应用程序,其中我有一个服务器和一个相互通信的客户端 -通过远程登录. (通过插座)。服务器程序正在监视一罐气体,并通过套接字将温度水平和压力水平发送到接受的客户端。

当我在 telnet 中写东西时,我已经设法让客户端和服务器相互通信,但是...... 我需要一些帮助来处理我发送的数据

我制作了一个登录脚本来确定用户是否是有效用户。所以我可以写两个词,如“myname”“space”“mypassword”,我得到一个绿灯并返回一个有效的用户。但是当我只写一个字,然后按回车键时,它给了我: Exeption in thread... java.lang.Array.IndexOutOfBoundsExeption EXEPT for when I write exit or logout!

(所有用户都在脚本中硬编码,以便于测试。(登录脚本本身工作正常,当我写错时返回有效用户=假。)这是我的代码。添加了一些伪代码,因为我我不是 100% 确定要做什么……;)

String telNetCommand = dataIn.readLine();
            System.out.println(telNetCommand);

            String dataInArray[] = telNetCommand.split(" ");

            user.isValid(dataInArray[0], dataInArray[1]);

            if (dataInArray[1] == "\n") {
            //Ignore login request and continue telnet-logging?
            }

客户端应用程序对每个命令都有一个按钮,例如:

“每隔 n 秒向我发送一次数据”,或“每隔 n 秒向我发送一批数据。如果命令等于退出,或注销 -> 中断操作....

// --------------// USER INPUT FROM CLIENT APP //--------------------------//

            // --------------// CONTINUE ? //----------------------------//
            if (command.equals("CONTINUE")) {
                continueSession();
                else  {    //..Kill session
                }   
            }

            // --------------// SKIP <N> //----------------------------//
            if (command.equals("SKIP_N")) {
                skipEveryNthData();
            }

            // --------------// BATCH <N> //---------------------------//
            if (command.equals("BATCH_N")) {
                batchEveryNthData();
            }

            // --------------// LOGG OUT #1 //-------------------------//
            if (command.equals("logout") || command.equals("exit")) {
                break;
            }

也许我现在有点困惑,但我认为我需要将所有数据放入一个数组中,并检查

if
dataInArray[0] == "CONTINUE"
dataInArray[0] == "SKIP_N", or
dataInArray[0] == "BATCH_N" 
(then send some data back)...

和...

if dataInArray[1] == "enter" ("\n") execute the single word commands ...??
if dataInArray[0] == "LOG_IN" or "PASSWORD" check if valid user is true..

感谢您的帮助和/或提示!:)

4

3 回答 3

1

很可能是由以下IndexOutOfBoundsExeption原因引起的:

user.isValid(dataInArray[0], dataInArray[1]);

确保传入String telNetCommand的内容至少包含一个空格,以便您在Strings数组中有 2 个空格。你可以这样做检查数组的大小:

if (dataInArray.length < 2) {
   throw new IllegalArgumentException(telNetCommand + " only contains " + dataInArray.length + " elements");
}

另外,在另一个注意事项上,请确保String.equals在检查字符串内容时使用:

if ("\n".equals(dataInArray[1])) {
于 2012-10-21T16:40:53.253 回答
1

在这部分代码中:

String dataInArray[] = telNetCommand.split(" ");
user.isValid(dataInArray[0], dataInArray[1]);

您假设该telNetCommand字符串包含一个空格。如果没有,dataInArray将只包含一个元素并dataInArray[1]抛出一个IndexOutOfBoundsExeption.

您应该检查数组的大小:

if (dataInArray.length < 2) {
    //no space in the command - do what you need to do
    //for example an error message
}
于 2012-10-21T16:41:24.317 回答
1

多谢你们。我现在没有收到任何错误......这就是我最终做的事情。我必须设置它 == 2 以免出现任何错误。

while (true) {
            String telnetCommand = dataIn.readLine();

            System.out.println(telnetCommand);

            String dataInArray[] = telnetCommand.split(" ");

            if (dataInArray.length == 2) {
                user.isValid(dataInArray[0], dataInArray[1]);
            }

            if (dataInArray.length < 2) {
                if (telnetCommand.equals("CONTINUE")) {
                    continueThisSession();
                    System.out.println("Running method continueThisSession");
                }

                if (telnetCommand.equals("SKIP_N")) {
                    skipEveryNthData();
                    System.out.println("Running method skipEveryNthData");
                }

                if (telnetCommand.equals("BATCH_N")) {
                    batchEveryNthData();
                    System.out.println("Running method batchEveryNthData");
                }

                if (telnetCommand.equals("logout")  || telnetCommand.equals("exit")) {
                    break;
                }
            }
        }

和平 :)

于 2012-10-21T19:14:51.103 回答