Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 使用ProcessBuilder读取/写入telnet进程_Java_Telnet_Processbuilder_Printwriter - Fatal编程技术网

Java 使用ProcessBuilder读取/写入telnet进程

Java 使用ProcessBuilder读取/写入telnet进程,java,telnet,processbuilder,printwriter,Java,Telnet,Processbuilder,Printwriter,我正试图通过ProcessBuilder从/totelnet进程读取/写入值 public static void main(String[] args) { try { telnetProcess = new ProcessBuilder("C:\\Windows\\System32\\telnet.exe","x.x.x.x").start(); telnetInputReader = new BufferedReader(n

我正试图通过
ProcessBuilder
从/to
telnet
进程读取/写入值

 public static void main(String[] args) {
        try {
            telnetProcess = new ProcessBuilder("C:\\Windows\\System32\\telnet.exe","x.x.x.x").start();
            telnetInputReader = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream()));
            telnetOuputWriter = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream()));
            expectPattern("login:");
            sendCmd("user");
            expectPattern("password:");
            sendCmd("pwd");
            expectPattern("switch>#");
            sendCmd("exit");
            expectPattern("Connection to host lost");
        } catch (IOException ex) {
            System.out.println("Exception : " + ex);
        }
    }
我犯了以下错误

java.io.IOException: Cannot run program "C:\Windows\System32\telnet.exe": CreateProcess error=2, The system cannot find the file specified
我试图将文件路径更改为unix格式的样式,如
C:/Windows/System32/telnet.exe
,但没有成功。(尽管我认为它不会起作用)。然后将
telnet.exe
从它的位置复制到其他用户的主目录,我没有收到任何错误。(?)

但是,我没有看到预期的输出。我没有从进程中得到任何响应,代码退出

    public static void sendCmd(String cmd) {
        System.out.println(cmd);
        try {
            telnetOuputWriter.write(cmd + "\n", 0, cmd.length());
        } catch (IOException ex) {
            Logger.getLogger(TelnetProcessHandler.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public static String expectPattern(String pattern) {
        String cmdResponse = "";
        try {
            String line = "";
            // Always getting 'null' here
            while ((line = telnetInputReader.readLine()) != null) {
                System.out.println(line);
                cmdResponse += line;
                if (line.contains(pattern)) {
                    break;
                }
            }
        } catch (IOException ex) {
            System.out.println("ex : " + ex);
        }
        return cmdResponse;
    }
这有什么不对?然后是另一个查询。我曾尝试使用
PrintWriter
来编写进程,而进程中又有
BufferedWriter
,比如

telnetOuputWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream())));
在这种情况下使用
PrintWriter
可以吗


注意:由于某些原因,我想坚持通过进程的方式使用telnet,而不是使用
Socket
TelnetClient
expect4j
telnet程序不使用标准的输入和输出流与用户通信,它需要直接使用控制台设备。你必须找到另一种方法来做你想做的事

例如,您可以使用实现telnet协议的Java库。例如,请参见此问题: