我在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:
,否则退出并显示错误消息(这就是我在你的情况下会做的)
-
创建一个单独的线程,该线程将在所需时间后退出。
-
您需要使用
boolean
变量作为标志、while
循环和break
来控制这个单独的线程。 -
在方法中将此标志设置为 true,该方法在您与 telnet 的连接成功时返回,这将
break
该单独线程中的循环。 -
如果这在规定的时间内没有发生,那么该单独的线程将执行
System.exit(0)
,因此您的程序结束。