InetAddress.getByName抛出异常的问题

检测网络是否畅通的一段代码,怎么会有异常抛出?下面是部分代码:

writeLog("===========开始检测百度www.baidu.com======\n");
try{
host = InetAddress.getByName("www.baidu.com").toString();
}catch(UnknownHostException e){
e.printStackTrace();
}
try{
status = InetAddress.getByName(host).isReachable(timeOut);
}catch(IOException e){
e.printStackTrace();
}
if(status){
writeLog("成功\n");
}else{
writeLog("网站访问不到,\n");
}

结果确实输出了成功,说明ping www.baidu.com也成功了,可是会有这样的提示:
java.net.UnknownHostException: www.baidu.com/61.135.169.125
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(Unknown Source)
at java.net.InetAddress.getAddressFromNameService(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at ping.ActionHandle.checkServer(PingSwtich.java:247)
at ping.ActionHandle$2.actionPerformed(PingSwtich.java:39)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$400(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
...全文
1094 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我把www.baidu.com换成www.163.com就没有问题,难道是百度的问题?
  • 打赏
  • 举报
回复

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;


public class Test {
	public static void main(String args[]){
		String host = "www.baidu.com"; 
		int timeOut = 5000;  
		boolean status=true;
		try{
			host = InetAddress.getByName(host).getHostName();
		}catch(UnknownHostException e){
			e.printStackTrace();
		}
		try{
			System.out.println(host);
			status = InetAddress.getByName(host).isReachable(timeOut);  
		}catch(IOException e){
			e.printStackTrace();
		}		 
		if(status){
			System.out.println("成功\n");
		}else{
			System.out.println("网站访问不到,\n");
		}
	}
}
www.baidu.com 网站访问不到, 怎么访问不到,百度我访问没有问题啊,在命令行也能ping通啊。 C:\Windows\System32>ping www.baidu.com 正在 Ping www.a.shifen.com [61.135.169.105] 具有 32 字节的数据: 来自 61.135.169.105 的回复: 字节=32 时间=17ms TTL=56 来自 61.135.169.105 的回复: 字节=32 时间=17ms TTL=56 来自 61.135.169.105 的回复: 字节=32 时间=17ms TTL=56 来自 61.135.169.105 的回复: 字节=32 时间=17ms TTL=56 61.135.169.105 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 17ms,最长 = 17ms,平均 = 17ms host = InetAddress.getByName(host).getHostAddress(); 改成获取ip地址也不行,怎么回事?
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
楼主不应该啊,应该是粗心吧。。 host = InetAddress.getByName("www.baidu.com").toString(); 这句话如果打印的话结果是 www.baidu.com/61.135.169.125 然后你用这个去 status = InetAddress.getByName(host).isReachable(timeOut); 当然会报异常了。。 改成 host = InetAddress.getByName("www.baidu.com").getHostName();就可以了。
哦,明白了,第一次接触java,是我选的方法不对,谢谢了!
尘缘udbwcso 2013-10-04
  • 打赏
  • 举报
回复
status = InetAddress.getByName("www.baidu.com").isReachable(timeOut); 这样写应该就可以了 不过返回的是false,用ping可以 public boolean isReachable(int timeout) 测试是否可以达到该地址。实现尽最大努力试图到达主机,但防火墙和服务器配置可能阻塞请求,使其在某些特定的端口可以访问时处于不可到达状态。
失落夏天 2013-10-04
  • 打赏
  • 举报
回复
楼主不应该啊,应该是粗心吧。。 host = InetAddress.getByName("www.baidu.com").toString(); 这句话如果打印的话结果是 www.baidu.com/61.135.169.125 然后你用这个去 status = InetAddress.getByName(host).isReachable(timeOut); 当然会报异常了。。 改成 host = InetAddress.getByName("www.baidu.com").getHostName();就可以了。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧