如何在java中刷新DNS

如何在java中刷新DNS,java,windows,dns,ip,flush,Java,Windows,Dns,Ip,Flush,我目前正试图找到一种通过java程序刷新dns缓存的方法。当我执行代码时,会出现命令提示符,但我不知道如何让代码执行 import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; class SyncPipe implements Runnable { public SyncPipe(InputStream istrm, OutputStream ostrm) { istrm_ =

我目前正试图找到一种通过java程序刷新dns缓存的方法。当我执行代码时,会出现命令提示符,但我不知道如何让代码执行

import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;

class SyncPipe implements Runnable
{
public SyncPipe(InputStream istrm, OutputStream ostrm) {
  istrm_ = istrm;
  ostrm_ = ostrm;
 }
  public void run() {
  try
  {
      final byte[] buffer = new byte[1024];
      for (int length = 0; (length = istrm_.read(buffer)) != -1; )
      {
          ostrm_.write(buffer, 0, length);
      }
  }
  catch (Exception e)
  {
      e.printStackTrace();
  }
}

private final OutputStream ostrm_;
private final InputStream istrm_;
}
public class FlushCommand {

FlushCommand(InputStream errorStream, PrintStream err) {
    throw new UnsupportedOperationException("Not supported yet."); 
}

}
主要方法如下:

    String command = "cmd /c start cmd.exe";
    {

};
Process p = null;
    try {// Execute command

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

// Get output stream to write from it
OutputStream out = child.getOutputStream();

out.write("cd C:/ /r/n".getBytes());
out.flush();
out.write("dir /r/n".getBytes());
out.close();
        p = Runtime.getRuntime().exec(command);
    } catch (IOException ex) {
        Logger.getLogger(FlushDNS.class.getName()).log(Level.SEVERE, null, ex);
    }
new Thread((Runnable) new FlushCommand(p.getErrorStream(), System.err)).start();
new Thread((Runnable) new FlushCommnad(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("dir c:\\ /A /Q");
stdin.println("ipconfig/flushdns");
// write any other commands you want here
stdin.close();
int returnCode = 0;
    try {
        returnCode = p.waitFor();
    } catch (InterruptedException ex) {
        Logger.getLogger(FlushDNS.class.getName()).log(Level.SEVERE, null, ex);
    }
System.out.println("Return code = " + returnCode);
}                                        

你为什么不从最基本的开始呢

您的命令只是打开一个命令窗口。如果我没记错的话,下面的程序应该会刷新你的dns并保持未关闭状态(cmd不会自动关闭)

我必须检查我的电脑中的旧代码,以确保安全,但我建议你从基本开始,然后做多线程等


或者,可以使用process builder创建命令

你为什么不从最基本的开始呢

您的命令只是打开一个命令窗口。如果我没记错的话,下面的程序应该会刷新你的dns并保持未关闭状态(cmd不会自动关闭)

我必须检查我的电脑中的旧代码,以确保安全,但我建议你从基本开始,然后做多线程等


或者,可以使用process builder创建命令

这看起来太复杂了。为什么需要不同的线程和特殊的类来读取/写入子进程调用的stdin/stderr?从阅读一篇关于如何做到这一点的好教程开始。而且:在Java中,您只在常量中使用“389;”。像istrm这样的缩写也不是很常见。你应该用“windows”来标记你的问题。事实上,我刚刚添加了这个标记,谢谢你,我一定会研究的。我对这一切还是相当陌生的,所以我仍在努力学习,因为这看起来太复杂了。为什么需要不同的线程和特殊的类来读取/写入子进程调用的stdin/stderr?从阅读一篇关于如何做到这一点的好教程开始。而且:在Java中,您只在常量中使用“389;”。像istrm这样的缩写也不是很常见。你应该用“windows”来标记你的问题。事实上,我刚刚添加了这个标记,谢谢你,我一定会研究的。我对这一切还是相当陌生的,所以我仍在努力学习,这正是我想要的。非常感谢你!我意识到我正朝着这个方向努力,这正是我想要的。非常感谢你!我意识到我是在向复杂的lol迈进
String command = "cmd.exe /c start cmd.exe /c start ipconfig /flushdns";
try{
      Runtime.getRuntime.exec(command);
catch(...){}