PING和TELNET用法介绍

JAVA里的PING是在JDK 1.5后用了新的函数isreachable去实现,具体介绍如下:

  InetAddress对象的常用方法

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

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

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

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

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

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

   package org.dakiler.javanet.chapter1; 
  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: 207.46.19.254 
  host: www.microsoft.com 
  canonical host name: wwwbaytest2.microsoft.com 

  207 46 19 254

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

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

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

   package org.dakiler.javanet.chapter1; 
  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的话,会比较准确,比如以下代码

     // TODO Auto-generated method stub 
  Socket server = null; 
  try { 
  server = new Socket(); 
  InetSocketAddress address = new InetSocketAddress("bbs.sysu.edu.cn",23); 
  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(); 
  } 

мой комментарий

Дорогу одолеет идущий. Желаю вам ни когда не останавливаться и быть творческой личностью - вечно!

发表新评论

  • You can use BBCode tags in the text.
  • 自动断行和分段。

更多关於格式化选项的信息