Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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中通过telnet执行open命令?_Java_Windows - Fatal编程技术网

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

如何在Java中通过telnet执行open命令?,java,windows,Java,Windows,上面的代码没有在telnet下执行open命令 我做错了什么?你怎么知道?由于您没有捕获输入流,因此永远不会看到来自telnet应用程序的输出(或错误响应)。您确实需要连接这三个线程(输出、输入和错误),并且可能需要一个单独的线程来读取输入和错误流。这将使你在这个问题上取得一些进展 因为您事先不知道输入流(或telnet的输出)中有多少个字符,所以您只需要读取stream.available()给定的字符数,或者一次读取一个字节,直到得到-1。当我在我的机器上运行代码时,会出现一个Windows

上面的代码没有在telnet下执行open命令


我做错了什么?你怎么知道?由于您没有捕获输入流,因此永远不会看到来自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");