我使用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)中使用任何标志或其他标志。 当应用程序收到无效登录时,任何人都可以为我提供避免无限循环的解决方案。
答案 0 :(得分:1)
创建一个单独的线程,该线程将在您所需的时间后退出。
您需要使用boolean
变量作为标记,while
循环和break
来控制此单独的主题。
在与telnet的连接成功时返回的方法中将此标志设置为true,这将break
该单独线程中的循环。
如果在规定的时间内没有发生这种情况,那么该单独的线程将执行System.exit(0)
,因此您的程序结束。
答案 1 :(得分:1)
您有成功条件(telnet服务器发送login:
)但不是失败条件。所以循环可以永远运行。
在失败时打破循环应该怎么办?想想一个条件。也许:“尝试20秒”或“login:
尚未在前100个字符中发送”。
你也可以逐行阅读并期望服务器发送的第一行(在一定的时间间隔内)等于login:
,否则退出并显示错误消息(这就是我在你的情况下所做的事情) )