打破无限循环通过读“登录:”等待控制台输入java的

问题描述:

我使用org.apache.commons.net.telnet.TelnetClient打破无限循环通过读“登录:”等待控制台输入java的

,我提供的登录信息在Java中的远程登录代码telnet服务器通过下面的代码,

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)中使用任何标志或其他标志。 任何人都可以为我提供避免无限循环的解决方案,当它的应用程序收到无效登录。

+1

请正确格式化您的代码。 – 2012-08-12 15:16:31

+0

请不要在使用StringBuilder时使用StringBuffer。 – 2012-08-13 08:03:35

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

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

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

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

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

什么应该发生在故障时打破循环?考虑一个条件。也许:“尝试20秒”或“login:尚未在前100个字符内发送”。

您可以通过线藏汉读取线,并期望服务器发送(在一定的时间间隔内)的第一行等于login:,否则错误消息出口(这就是我想你的情况做)