Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
中断等待控制台输入java的无限循环_Java_Telnet - Fatal编程技术网

中断等待控制台输入java的无限循环

中断等待控制台输入java的无限循环,java,telnet,Java,Telnet,我有一个使用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

我有一个使用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:”时,它会导致无限循环等待“login:”in“in.read();”

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

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

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

  • 在连接到telnet成功时返回的方法中将此标志设置为true,这将
    中断该单独线程中的循环

  • 如果这没有在规定的时间内发生,那么这个单独的线程将执行一个
    系统。退出(0)
    ,所以程序结束


  • 您有成功标准(telnet服务器发送
    登录:
    ),但没有失败标准。因此,循环可能永远运行

    发生故障时,应如何打破循环?考虑一个条件。可能:“尝试20秒”或“
    登录:
    在前100个字符内未发送”


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

    请正确格式化您的代码。当您可以使用StringBuilder时,请不要使用StringBuffer。