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



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

我通过以下代码从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 服务器时,它会提示例如"用户名:",它会导致无限循环等待"in.read();"中的"登录:"

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

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

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

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

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

  2. 您需要使用 boolean 变量作为标志、while 循环和 break 来控制这个单独的线程。

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

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

最新更新