`
java_my_life
  • 浏览: 259015 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA里的PING和TELNET用法

    博客分类:
  • JAVA
阅读更多
JAVA里的PING是在JDK 1.5后用了新的函数isreachable去实现,具体介绍如下:

  InetAddress对象的常用方法

  InetAddress类有很多get方法,用来获取主机名,主机地址等信息。主要有:

  byte[] getAddress() 返回次InetAddress对象的原始IP地址,保存为一个byte数组

  String getCanonicalHostName() 获取此IP地址的完全限定域名

  String getHostAddress() 获取IP地址的字符串,返回为一个String

  String getHostName() 获取此IP地址的主机名

  下面一个简单的例子展示这些方法的使用:

import java.net.InetAddress;

public class Example3 {
	public static void main(String args[]) throws Exception {
		InetAddress address = InetAddress.getByName("www.microsoft.com");
		System.out.println("ip: " + address.getHostAddress());
		System.out.println("host: " + address.getHostName());
		System.out.println("canonical host name: "
				+ address.getCanonicalHostName());
		byte[] bytes = address.getAddress();
		for (byte b : bytes) {
			if (b >= 0)
				System.out.print(b);
			else
				System.out.print(256 + b);
			System.out.print(" ");
		}
	}
}

这个例子首先是获取www.microsoft.com的对应的InetAddress实例,然后分别打印 address.getHostAddress() address.getHostName()以及address.getCanonicalHostName()。在这个例子中,需要注意的是IP地址中,每一个都是0-255之间的,是无符号的。但是java中的byte表示的区域是-128~127,所以中间需要做一个转换。
结果如下:

ip: 65.55.12.249
host: www.microsoft.com
canonical host name: wwwco2vip.microsoft.com
65 55 12 249 

1.2. InetAddress对象的其他实用方法

  isReachable(int timeout) 测试是否能达到特定IP地址

  isReachable(NetworkInterface netif,int ttl,int timeout)测试是否能达到特定IP地址,并且制定特定的NetworkInterface,ttl表示路由过程中的最大跳数,timeout是超时时间。一个简单的例子如下:

import java.net.InetAddress;

public class Example4 {
	public static void main(String args[]) throws Exception {
		InetAddress address1 = InetAddress.getLocalHost();
		InetAddress address2 = InetAddress.getByName("www.baidu.com");
		System.out.println(address1.isReachable(5000));
		System.out.println(address2.isReachable(5000));
	}
}

分别测试本机是否可达以及www.baidu.com是否可达。运行的结果是:

  •  true
  •  false

感觉奇怪么,前者是正常的,但是按理说www.baidu.com应该也是可达的,实际确实false,这个原因是因为isReachable的实现,通常是ICMP ECHO Request 或是尝试使用目标主机上的端口7进行连接,很有可能被防火墙拦截,所以会访问不到。
如果要TELNET的话,会比较准确,比如以下代码

import java.io.IOException;

import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;

 

public class CommonsTelnetTest {
       public static void main(String [] args){
    	// TODO Auto-generated method stub
    	Socket server = null;
    	 try {
    	 server = new Socket();
    	 InetSocketAddress address = new InetSocketAddress("smtp.126.com",25);
    	server.connect(address, 5000);
    	System.out.println("ok!");
    	 }
    	catch (UnknownHostException e) {
    	System.out.println("wrong!");
    	 e.printStackTrace();
    	 } catch (IOException e) {
    	System.out.println("wrong");
    	 e.printStackTrace();}
       }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics