「java换dns」JAVA怎么换皮肤

博主:adminadmin 2023-03-21 19:58:05 517

本篇文章给大家谈谈java换dns,以及JAVA怎么换皮肤对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java网络编程从入门到精通(4):DNS缓存

在通过DNS查找域名的过程中 可能会经过多台中间DNS服务器才能找到指定的域名 因此 在DNS服务器上查找域名是非常昂贵的操作 在Java中为了缓解这个问题 提供了DNS缓存 当InetAddress类第一次使用某个域名(如)创建InetAddress对象后 JVM就会将这个域名和它从DNS上获得的信息(如IP地址)都保存在DNS缓存中 当下一次InetAddress类再使用这个域名时 就直接从DNS缓存里获得所需的信息 而无需再访问DNS服务器

DNS缓存在默认时将永远保留曾经访问过的域名信息 但我们可以修改这个默认值 一般有两种方法可以修改这个默认值

在程序中通过java security Security setProperty方法设置安全属性nel的值(单位 秒) 如下面的代码将缓存超时设为 秒

java security Security setProperty( nel   );

设置java security文件中的neorkaddresl属性 假设JDK的安装目录是C \jdk 那么java security文件位于c \jdk \jre\lib\security目录中 打开这个文件 找到nel属性 并将这个属性值设为相应的缓存超时(单位 秒)

如果将nel属性值设为 那么DNS缓存数据将永远不会释放 下面的代码演示了使用和不使用DNS缓存所产生效果

package mynet;import  *;public class MyDNS{    public static void main(String[] args) throws Exception    {        // args[ ]: 本机名 args[ ] 缓冲时间        if (args length   )            return;        java security Security setProperty( nel  args[ ]);        long time = System currentTimeMillis();        InetAddress addresses [] = InetAddress getAllByName(args[ ]);        System out println( addresses :                            + String valueOf(System currentTimeMillis()   time)                        +  毫秒 );        for (InetAddress address : addresses )            System out println(address);        System out print( 按任意键继续 );        System in read();        time = System currentTimeMillis();        InetAddress addresses [] = InetAddress getAllByName(args[ ]);        System out println( addresses :                            + String valueOf(System currentTimeMillis()   time)                        +  毫秒 );        for (InetAddress address : addresses )            System out println(address);    }}

在上面的代码中设置了DNS缓存超时(通过args[ ]参数) 用户可以通过命令行参数将这个值传入MyDNS中 这个程序首先使用getAllByName建立一个InetAddress数组 然后通过System in read使程序暂停 当用户等待一段时间后 可以按任意键继续 并使用同一个域名(args[ ])再建立一个InetAddress数组 如果用户等待的这段时间比DNS缓存超时小 那么无论情况如何变化 addresses 和addresses 数组中的元素是一样的 并且创建addresses 数组所花费的时间一般为 毫秒(小于 毫秒后 Java无法获得更精确的时间)

测试

执行如下命令(将DNS缓存超时设为 秒)

java mynet MyDNS  

运行结果 (在 秒之内按任意键)

addresses :    毫秒/ 按任意键继续addresses :   毫秒/

运行结果 (在 秒后按任意键)

addresses :    毫秒/ 按任意键继续addresses :   毫秒/

在上面的测试中可能出现两个运行结果 如果在出现 按任意键继续… 后 在 秒之内按任意键继续后 就会得到运行结果 从这个结果可以看出 addresses 所用的时间为 毫秒 也就是说 addresses 并未真正访问DNS服务器 而是直接从内存中的DNS缓存得到的数据 当在 秒后按任意键继续后 就会得到运行结果 这时 内存中的DNS缓存中的数据已经释放 所以addresses 还得再访问DNS服务器 因此 addresses 的时间是 毫秒(addresses 和addresses 后面的毫秒数可能在不同的环境下的值不一样 但一般情况下 运行结果 的addresses 的值为 或是一个接近 的数 如 运行结果 的addresses 的值一般会和addresses 的值很接近 或是一个远比 大的数 如 )

测试

执行如下命令(ComputerName为本机的计算机名 DNS缓存超时设为永不过期[ ])

java mynet MyDNS ComputerName 

运行结果(按任意键继续之前 将 删除)

addresses :    毫秒myuniverse/ myuniverse/ 按任意键继续addresses :    毫秒myuniverse/ myuniverse/

从上面的测试可以看出 将DNS缓存设为永不过期后 无论过多少时间 按任意键后 addresses 任然得到了两个IP地址( 和 ) 而且addresses 的时间是 毫秒 但在这时 已经被删除 因此可以判断 addresses 是从DNS缓存中得到的数据 如果运行如下的命令 并在 秒后按任意键继续后 addresses 就会只剩下一个IP地址( )

java mynet MyDNS ComputerName 

如果域名在DNS服务器上不存在 那么客户端在进行一段时间的尝试后(平均为 秒) 就会抛出一个UnknownHostException异常 为了让下一次访问这个域名时不再等待 DNS缓存将这个错误信息也保存了起来 也就是说 只有第一次访问错误域名时才进行 称左右的尝试 以后再访问这个域名时将直接抛出UnknownHostException异常 而无需再等待 秒钟

访问域名失败的原因可能是这个域名真的不存在 也可能是因为DNS服务器或是其他的硬件或软件的临时故障 因此 一般不能将这个域名错误信息一直保留 在Java中可以通过neorkaddresl属性设置保留这些信息的时间 这个属性的默认值是 秒 它也可以通过java security Security setProperty方法或java security文件来设置 下面的代码演示了neorkaddresl属性的用法

package mynet;import  *;public class MyDNS {    public static void main(String[] args) throws Exception    {        java security Security setProperty( neorkaddresl                          );        long time =  ;        try        {            time = System currentTimeMillis();            InetAddress getByName( );        }        catch (Exception e)        {            System out println( 不存在! address :                              + String valueOf(System currentTimeMillis()   time)                            +  毫秒 );        }        //Thread sleep( ); // 延迟 秒        try        {            time = System currentTimeMillis();            InetAddress getByName( );        }        catch (Exception e)        {            System out println( 不存在! address :                              + String valueOf(System currentTimeMillis()   time)                            +  毫秒 );        }    }}

在上面的代码中将neorkaddresl属性值设为 秒 这个程序分别测试了address 和address 访问(这是个不存在的域名 读者可以将其换成任何不存在的域名)后 用了多长时间抛出UnknownHostException异常

运行结果

不存在! address :   毫秒不存在! address :   毫秒

我们从上面的运行结果可以看出 address 使用了 毫秒就抛出了异常 因此 可以断定address 是从DNS缓存里获得了域名不可访问的信息 所以就直接抛出了UnknowHostException异常 如果将上面代码中的延迟代码的注释去掉 那么可能得到如下的运行结果

不存在! address :   毫秒不存在! address :   毫秒

从上面的运行结果可以看出 在第 秒时 DNS缓存中的数据已经被释放 因此 address 仍需要访问DNS服务器才能知道是不可访问的域名

在使用DNS缓存时有两点需要注意

可以根据实际情况来设置nel属性的值 一般将这个属性的值设为 但如果访问的是动态映射的域名(如使用动态域名服务将域名映射成ADSL的动态IP) 就可能产生IP地址变化后 客户端得到的还是原来的IP地址的情况

lishixinzhi/Article/program/Java/hx/201311/11147

如何在java中配置主副DNS?

这段代码在我机器上是好用的。

Runtime.getRuntime().exec();会开新线程的,可能有多线程的冲突吧,像这样一次全写进去应该没什么问题,另外我的机器是vista,所以是ipv4,你自己改改吧。

我只把你if那个块里面的东西改了,其它的一样

-----------------------

if (n == "C201") {

try {

//先开一个线程运行本地的Netsh

Process p = Runtime.getRuntime().exec("Netsh");

//得到这个线程的输入输出流,输入流就相当于你的cmd窗口

//输出流就相当于你的键盘。(这里别看反了)

BufferedOutputStream w = new BufferedOutputStream(p.getOutputStream());

final BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));

//这个线程是为了看netsh的输出,主要是测试时候用

//实际不用管也可以

Thread t = new Thread() {

public void run() {

try {

String line;

while ((line = r.readLine()) != null) {

System.out.println(line);

}

r.close();

} catch (Exception e) {

}

}

};

t.start();

// 向输入流里面写数据,这个就相当于

// 你先在cmd里面敲了netsh回车之后

// 接着敲的命令。先选ip协议

w.write("interface ipv4\r\n".getBytes());

//设置地址,这个和你的是一样的啊...

w.write("set address \"Local Area Connection 2\" static 172.26.104.1 255.255.255.0 172.26.104.254 1\r\n".getBytes());

//再设dns

w.write("set dns name=\"Local Area Connection 2\" static addr=10.6.6.6 register=PRIMARY\r\n".getBytes());

//第二个dns

w.write("add dns name=\"Local Area Connection 2\" addr=202.96.128.86 index=2\r\n".getBytes());

//把输出缓存里的东西写进输出流

w.flush();

//退出netsh

w.write("quit\r\n".getBytes());

w.flush();

w.close();

} catch (IOException e) {

e.printStackTrace();

}

}

-------------------------

我解释的够详细了吧.....

java获取本机dns?

如何查看本机的DNS服务器?ipconfig其实是可以的。除此以外,还可以利用一个命令:在(开始-运行)cmd下输入netsh进入到netsh提示符再输入:int ip 进入到netsh interface ip 再输入dump这时候屏幕上出现当前连接的配置情况了这里必须介绍一下netsh到底是作什么用的!这个命令比较复杂,他包含了很多的子命令,所以这里只对部分命令进行讲解:1)查看本机IP:首先键入netsh,再netsh提示符下输入:interface 回车 之后:ip 回车 再之后:show address 回车 这样,就可以看到当前连接的IP地址和子网掩码。(其实这个命令不如ipconfig简单,也不如ipconfig/all全面)2)修改网络配置:接着上面的命令,我们使用:set address name=“本地连接” source=static addr=192.168.0.200 mask=255.255.255.0,这样就修改了当前的IP地址,用show address来看看(或者用ipconfig)3)显示一个完整的网络配置教本:刚才说过,第一个命令显示的信息不如ipconfig/all全面,不用着急,netsh再打印显示网络配置上,还是有自己的特色的!例如:再interface ip状态下输入:dump,会显示一个清单,显示所有本地连接(不管你是否使用~)与netstat -an不完全一样![]

关于java换dns和JAVA怎么换皮肤的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。