程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA裡的PING和TELNET

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地址的主機名

  下面一個簡單的例子展示這些方法的使用:

  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();

  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved