Process P = Runtime.getRuntime().exec("cmd /c start telnet");
System.out.println("done running ..");
OutputStream output = P.getOutputStream();
BufferedOutputStream out = new BufferedOutputStream(output);
String S = "open\n"; byte[] BS = S.getBytes();
out.write(BS); out.close();
上面的代码没有在telnet下执行open命令。
我做错了什么?
答案 0 :(得分:1)
你怎么知道的?由于您没有抓取输入流,因此您永远不会看到来自telnet应用程序的输出(或错误响应)。你真的需要连接所有三个(输出,输入和错误),你可能想要一个单独的线程来读取输入和错误流。这应该可以让你在这个问题上取得一些进展。
由于您事先并不知道输入流(或telnet的输出)中有多少个字符,因此您只想读取stream.available()给出的字符数,或者只是一次读取一个字节,直到得到-1。
答案 1 :(得分:1)
当我在我的机器上运行代码时,会出现一个Windows错误对话框,说明
Windows无法找到'telnet'。使 确保你正确输入了名字,并且 然后再试一次。
尝试用
替换第一行Process P = Runtime.getRuntime().exec("cmd /c C:\\Windows\\system32\\telnet.exe");
答案 2 :(得分:1)
不要生成具有路径和平台特定问题的telnet进程,而是考虑在端口25上打开一个原始套接字到目标主机。您将获得类似的输入输出流,但您的代码将不依赖于运行外部过程。
更新:看起来Apache Commons Net有一个Telnet客户端的实现。可能想尝试一下。
答案 3 :(得分:0)
您可以从Apache Commons库运行telnet,而不是在运行时运行telnet。这样你直接处理telnet而不是运行telnet的进程。
答案 4 :(得分:-1)
摆脱BufferedOutputStream,它在该上下文中没用。如果您认为必须使用它,至少需要flush()
。