打破无限循环通过读“登录:”等待控制台输入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)中使用任何标志或其他标志。 任何人都可以为我提供避免无限循环的解决方案,当它的应用程序收到无效登录。
答
创建一个单独的线程,它会在您想要的时间后退出。
您将需要使用
boolean
变量作为标志,while
循环和break
来控制此单独的线程。将此标志设置为true的方法会在您与telnet的连接成功时返回,并且这将成为该单独线程中的循环。
如果在规定的时间内没有发生这种情况,那么单独的线程将执行
System.exit(0)
,所以程序结束。
答
你有一个成功的标准(Telnet服务器发送login:
),但不是一个失败的标准。所以循环可能会永远运行。
什么应该发生在故障时打破循环?考虑一个条件。也许:“尝试20秒”或“login:
尚未在前100个字符内发送”。
您可以通过线藏汉读取线,并期望服务器发送(在一定的时间间隔内)的第一行等于login:
,否则错误消息出口(这就是我想你的情况做)
请正确格式化您的代码。 – 2012-08-12 15:16:31
请不要在使用StringBuilder时使用StringBuffer。 – 2012-08-13 08:03:35