打破等待控制台输入java的无限循环

时间:2012-08-12 15:13:13

标签: java telnet

我使用org.apache.commons.net.telnet.TelnetClient在Java中使用telnet代码

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

    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服务器提示例如“username:”时,它会导致无限循环等待“in.read();”中的“login:”。

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

2 个答案:

答案 0 :(得分:1)

  1. 创建一个单独的线程,该线程将在您所需的时间后退出。

  2. 您需要使用boolean变量作为标记,while循环和break来控制此单独的主题。

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

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

答案 1 :(得分:1)

您有成功条件(telnet服务器发送login:)但不是失败条件。所以循环可以永远运行。

在失败时打破循环应该怎么办?想想一个条件。也许:“尝试20秒”或“login:尚未在前100个字符中发送”。

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