1

我有一个使用 org.apache.commons.net.telnet.TelnetClient 的 Java 远程登录代码

我通过以下代码从远程登录服务器读取“登录:”来提供登录信息,

    in = telnet.getInputStream();
    char lastChar = pattern.charAt(pattern.length()-1);
    StringBuffer sb = new StringBuffer();

    char ch = (char) in.read();
    while (true) {
       System.out.print(ch);
       sb.append(ch);
       if (ch == lastChar) {
         if (sb.toString().endsWith(pattern)) {
            return sb.toString();
         }
       }
       ch = (char) in.read();
       i++;
       // System.out.print(i);
    }

但是当我给一个无效的telnet服务器提示例如“用户名:”时,它会导致无限循环等待“in.read();”中的“登录:”

当它在 in.read() 中等待时,我也不能在 while(_flag) 中使用任何标志或其他标志。当应用程序收到无效登录时,谁能为我提供避免无限循环的解决方案。

4

2 回答 2

1
  1. 创建一个单独的线程,它将在您想要的时间后退出。

  2. 您将需要使用boolean变量作为标志、while循环和break.

  3. 在连接到 telnet 成功时返回的方法中将此标志设置为 true,这将break在该单独线程中循环。

  4. 如果这在规定的时间内没有发生,那么那个单独的线程将执行 a System.exit(0),因此您的程序结束。

于 2012-08-12T15:23:21.060 回答
1

您有成功标准(telnet 服务器发送login:)但没有失败标准。所以循环可能永远运行。

应该怎么做才能打破失败的循环?想一个条件。也许:“尝试 20 秒”或“login:前 100 个字符内未发送”。

您也可以逐行阅读并期望服务器发送的第一行(在一定时间间隔内)等于login:,否则退出并显示错误消息(这就是我在您的情况下所做的)

于 2012-08-12T15:23:46.583 回答