Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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中使用命令重新启动调制解调器_Java_Command Prompt - Fatal编程技术网

如何在java中使用命令重新启动调制解调器

如何在java中使用命令重新启动调制解调器,java,command-prompt,Java,Command Prompt,您好,我想用java中的命令提示符重新启动adsl调制解调器。但是当需要用户名并且必须输入用户名时,cmd停止。问题是什么 import java.io.IOException; public class ExecuteShellComand { public static void main(String[] args) throws IOException { String tel = "telnet 192.168.1.1 23"; S

您好,我想用java中的命令提示符重新启动adsl调制解调器。但是当需要用户名并且必须输入用户名时,cmd停止。问题是什么

import java.io.IOException;

public class ExecuteShellComand
{

    public static void main(String[] args) throws IOException
    {

        String tel = "telnet 192.168.1.1 23";
        String user = "admin";
        String pass = "admin";
        String reboot = "reboot";
        String command = "cmd /c start cmd.exe /c"+tel+"/c"+user+"/c"+pass+"/c"+reboot;

        Process child = Runtime.getRuntime().exec(command);

    }
}

每个参数之间可能还需要一个空格。按照键入方式,您将向提示符发送命令,如下所示:

cmd /c start cmd.exe /ctelnet 192.168.1.1 23/cadmin/cadmin/creboot
添加一个System.out.println(命令);创建字符串后,查看字符串中的实际内容

将代码编辑为以下内容:

String command = "cmd /c start cmd.exe /c "+tel+" /c "+user+" /c "+pass+" /c "+reboot;
System.out.println(command);

您需要将用户名和密码以及
reboot
命令发送到telnet命令的标准输入(stdin)。为此,请创建一个流程,然后:

// You /probably/ don't need "cmd /c" here ...
Process child = Runtime.getRuntime().exec(tel);

// Write to stdin of child, force flush after each line
// Yes, you need to get an OutputStream here ... it's connected to stdin of the child
PrintWriter out = new PrintWriter(child.getOutputStream(), true);
out.println("admin");
out.println("admin");
out.println("reboot");

请注意,在发送这些命令以防止子进程阻塞时,可能必须读取stdout。为此,创建一个背景线程。请参阅本文:

您是否尝试在构建变量后打印出
命令
变量,以便验证它是否符合预期?看起来你正在做
…telnet telnet…
我编辑了我的代码,但仍然有问题。如何打印命令?
System.out.println(命令)
我认为命令没有问题。在cmd“连接到192.168.1.1…无法打开到主机的连接,在端口23:onnect failed”中,您假设您正在将命令正确地构建为字符串。打印出您的命令变量,并验证它是否与手动输入的命令相同。我刚刚尝试了您的代码,但它不起作用。我怎么能读stdout?请不要在你的生活中再使用“没有工作”。这简直是浪费时间。我在代码中添加了一个链接,显示了如何阅读标准输出。如果“不起作用”,那么请告诉我们您期望的是什么,以及代码做了什么(包括错误消息、堆栈跟踪和您拥有的其他每一点信息)。您是否能够从telnet帮助页面获得任何信息?在尝试用Java执行命令之前,最好先尝试更正该命令。在继续之前,请确保命令正确。我认为问题在于/c命令。因为当我在命令提示符下执行/c telnet 192.168.1.1 23时,get error
/c不会被识别为内部或外部命令。