如何在 java 中刷新 DNS
How to flushdns in java
我目前正在尝试通过 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);
}
你为什么不从最基础的开始?
你的命令只是打开一个命令window。如果我没记错的话,下面应该刷新你的dns并保持未关闭状态(cmd不会自动关闭)。
String command = "cmd.exe /c start cmd.exe /c start ipconfig /flushdns";
try{
Runtime.getRuntime.exec(command);
catch(...){}
我必须检查计算机中的旧代码以确保确定,但我建议您从基础开始,然后再进行多线程等。
或者,您可以使用进程构建器来创建您的命令。
我目前正在尝试通过 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);
}
你为什么不从最基础的开始?
你的命令只是打开一个命令window。如果我没记错的话,下面应该刷新你的dns并保持未关闭状态(cmd不会自动关闭)。
String command = "cmd.exe /c start cmd.exe /c start ipconfig /flushdns";
try{
Runtime.getRuntime.exec(command);
catch(...){}
我必须检查计算机中的旧代码以确保确定,但我建议您从基础开始,然后再进行多线程等。
或者,您可以使用进程构建器来创建您的命令。