如何在Java中通过telnet执行open命令?

时间:2009-11-04 14:57:39

标签: java windows

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命令。

我做错了什么?

5 个答案:

答案 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()