我試圖通過ProcessBuilder
讀取/寫入telnet
進程的值。使用ProcessBuilder讀取/寫入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
。