如何在Java中通过telnet执行open命令?
上面的代码没有在telnet下执行open命令如何在Java中通过telnet执行open命令?,java,windows,Java,Windows,上面的代码没有在telnet下执行open命令 我做错了什么?你怎么知道?由于您没有捕获输入流,因此永远不会看到来自telnet应用程序的输出(或错误响应)。您确实需要连接这三个线程(输出、输入和错误),并且可能需要一个单独的线程来读取输入和错误流。这将使你在这个问题上取得一些进展 因为您事先不知道输入流(或telnet的输出)中有多少个字符,所以您只需要读取stream.available()给定的字符数,或者一次读取一个字节,直到得到-1。当我在我的机器上运行代码时,会出现一个Windows
我做错了什么?你怎么知道?由于您没有捕获输入流,因此永远不会看到来自telnet应用程序的输出(或错误响应)。您确实需要连接这三个线程(输出、输入和错误),并且可能需要一个单独的线程来读取输入和错误流。这将使你在这个问题上取得一些进展
因为您事先不知道输入流(或telnet的输出)中有多少个字符,所以您只需要读取stream.available()给定的字符数,或者一次读取一个字节,直到得到-1。当我在我的机器上运行代码时,会出现一个Windows错误对话框,其中说明 Windows找不到“telnet”。制作 确保键入的名称正确,并且 然后再试一次 尝试将第一行替换为
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();
去掉BufferedOutputStream,它在该上下文中没有用处。如果你认为<强>必须< /强>使用它,至少你需要<代码> FrHuSH()/<代码> .< /P> < P>,而不是生成一个具有PATE和平台特定问题的telnet进程,考虑只打开端口25上的目标主机的原始套接字。您将获得类似的输入输出流,但您的代码不依赖于运行外部进程
更新:看起来ApacheCommonsNet有一个Telnet客户端的实现。您可能想尝试一下。您可以从库中运行telnet,而不是在运行时运行telnet。这样你就直接处理了telnet,而不是运行telnet的进程。你的代码试图写入输出流,而不是输入流。@ Lutz:向输出流写入是不错误的。我猜你的CAP锁在流中间已经变得疯狂了。@ Matt Ball:是的,但是这个主题谈到了一个输入流。这就是为什么我要问:)阿卡什:你到底想归档什么?当您可以用Java打开网络连接时,为什么要远程控制telnet?他可能会感到困惑,因为进程的
getInputStream()
实际上返回了包含进程输出的流。这是可以理解的。这个问题我已经解决了六次了,但我还是被术语弄糊涂了。这有点不直观。@ammo:没有。关闭将自动刷新。
Process P = Runtime.getRuntime().exec("cmd /c C:\\Windows\\system32\\telnet.exe");