a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 260|回复: 1

[其他] JAVA技巧:PING和TELNET用法介绍

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
JAVA里的PING是在JDK 1.5后用了新的函数isreachable去实现,具体介绍如下:   InetAddress对象的常用方法
2 g7 l# Q0 }6 S5 O- o0 h) r4 e. J% M  InetAddress类有很多get方法,用来获取主机名,主机地址等信息。主要有:
% l2 ?8 H( a1 P0 r" Z: n  byte[] getAddress() 返回次InetAddress对象的原始IP地址,保存为一个byte数组
( z7 X# w0 h1 U0 m! e9 w1 c  String getCanonicalHostName() 获取此IP地址的完全限定域名) F6 ?- S1 u9 v
  String getHostAddress() 获取IP地址的字符串,返回为一个String
+ T; }. h+ P0 E  String getHostName() 获取此IP地址的主机名
, z9 Q( N$ e4 R* c' l6 a& ]  下面一个简单的例子展示这些方法的使用:4 m  y: K8 Y! R% q7 G

9 k: w' z$ o+ \3 i: Y
7 l8 X# p8 Y, [   package org.dakiler.javanet.chapter1;
; k3 b7 d0 f/ e4 G6 }7 o  import java.net.InetAddress;
" |! l; D- ^, t* R% [/ C3 t# [$ i3 \  public class Example3 ' T; q( U9 k% A+ P  k  c$ o7 I7 R
  { 2 V. e; C) b  O% E
  public static void main(String args[])throws Exception
( K5 B5 y$ u& L5 E' N  {
, ?0 _/ o+ [/ ]) A  w: t% F3 |  InetAddress address=InetAddress.getByName("www.microsoft.com"); 2 ?- D+ O4 L1 ~9 S
  System.out.println("ip: "+address.getHostAddress());
; y+ W. r8 n: J- y: D/ s( w) z5 V  System.out.println("host: "+address.getHostName()); 9 n1 Y0 p9 i6 K9 D, `
  System.out.println("canonical host name: "+address.getCanonicalHostName());
6 z2 e: H3 K8 o0 J  byte[] bytes=address.getAddress(); - S: X' y( v1 B1 g/ c
  for(byte b:bytes)
1 z: i1 j4 H) G* ^9 g0 ?5 m1 K/ l6 `  {
6 `) U: |1 H7 K: n  if(b>=0)System.out.print(b);
( D2 q% W  T9 O; ^& D1 g  else System.out.print(256+b); 5 {4 E" @9 ]% t4 I# Y$ X$ K
  System.out.print(" ");
  O1 ~$ R$ O1 W/ u0 T1 x  @* j0 H  } ! Q- l# q! }! h  J4 e* L4 c
  } # i/ J6 c2 E5 w9 m* n4 |% r
  }  这个例子首先是获取www.microsoft.com的对应的InetAddress实例,然后分别打印 address.getHostAddress() address.getHostName()以及address.getCanonicalHostName()。在这个例子中,需要注意的是IP地址中,每一个都是0-255之间的,是无符号的。但是java中的byte表示的区域是-128~127,所以中间需要做一个转换。
8 i+ u2 i9 h" i  结果如下:' G, r( `* K( N7 ^. z) x6 I; |* g

+ b# Q1 p) T4 a" ~, ?
5 Q+ f' W& R+ m1 L: O" M- G; n; l
/ w5 m  \% C$ _" C. k    ip: 207.46.19.254
: N4 P8 o% q* y/ B, |  ~  host: www.microsoft.com 4 R3 T0 J; @" k8 ~1 l: N/ D
  canonical host name: wwwbaytest2.microsoft.com
( V5 f0 S# c9 u3 X& a/ `4 z
( n7 o5 h$ H" v# Q% X1 `7 q" t3 H  
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:PING和TELNET用法介绍

207 46 19 254</p>  1.2. InetAddress对象的其他实用方法  Y! S4 r+ Y7 x- U1 a) M' D) g6 X0 K
  isReachable(int timeout) 测试是否能达到特定IP地址  Z- `7 Z2 H8 C# }0 l
  isReachable(NetworkInterface netif,int ttl,int timeout)测试是否能达到特定IP地址,并且制定特定的NetworkInterface,ttl表示路由过程中的最大跳数,timeout是超时时间。一个简单的例子如下:
. j) d; i4 V9 T6 p/ R6 j/ o1 P% z; x$ y
- m. i- w) P0 @/ ?0 K1 ~

/ Q) w6 C# n8 _; T   package org.dakiler.javanet.chapter1; - a3 ]8 u, @& v( b* M0 G
  import java.net.InetAddress; 2 `  C" `# l, _4 R9 p
  public class Example4
* c6 w/ _3 J% k2 a- Z! S  { ; |3 b5 a' G4 s4 O1 G
  public static void main(String args[])throws Exception
, y8 g& f( l& W( n  Y  { & S+ F6 y# R# j' ~. U9 y
  InetAddress address1=InetAddress.getLocalHost(); 1 D; E" \( d# J5 q! x1 y: c9 f
  InetAddress address2=InetAddress.getByName("www.baidu.com");
+ f+ _' K9 B+ R! B! M% n2 J+ N  System.out.println(address1.isReachable(5000)); , _4 k0 `! B" w4 M/ o
  System.out.println(address2.isReachable(5000));
0 h1 f4 \$ Z, o8 z( o  } ! }( H9 \/ H1 n! b
  }4 t3 G! G! w  l/ B% m6 Q
  分别测试本机是否可达以及www.baidu.com是否可达。运行的结果是:
/ I4 K% X) r1 Y9 g( j: ~# G; O0 {. n
1 a% T/ @$ Y+ T" g
! @) Q' {/ W% F4 Z4 w" s3 X' h+ r% n
    true ) S7 |( z' a# K1 K
  false
" ~" W# m( b- o" l* ]+ c, I) D  感觉奇怪么,前者是正常的,但是按理说www.baidu.com应该也是可达的,实际确实false,这个原因是因为isReachable的实现,通常是ICMP ECHO Request 或是尝试使用目标主机上的端口7进行连接,很有可能被防火墙拦截,所以会访问不到。
# I' B7 Q1 F: f+ j0 q2 D  如果要TELNET的话,会比较准确,比如以下代码1 F. N3 s- g+ L7 e

6 k  ~* j+ u: q9 H8 D7 U$ L/ x& ]7 ?8 l8 M
& i( K% P: t6 b/ P
     // TODO Auto-generated method stub ; K' Q, w: f. y' D; p0 P( _
  Socket server = null;
1 K1 O7 @. i7 `7 }, T/ x0 v; m  try { 4 U' r" c1 k; ~6 Z' e& @
  server = new Socket(); , f! Z7 E3 t# a3 S0 l# d1 B
  InetSocketAddress address = new InetSocketAddress("bbs.sysu.edu.cn",23); $ h" B3 t" X. r7 M# T6 V/ J
  server.connect(address, 5000);
' h8 `; T+ L) I$ n: B7 d+ P  System.out.println("ok!"); 4 S8 l  c- z- D7 U
  } $ f9 Y( l( f) j: K8 k" ]. k3 Y4 e
  catch (UnknownHostException e) { 3 t- Q6 _: h5 Z* O) `3 l' c/ ?1 m
  System.out.println("wrong!"); , a0 i2 N! w4 w4 h0 k
  e.printStackTrace(); / C" j% x. c% k# Q' O" k9 u) C+ k1 B
  } catch (IOException e) {
2 ?& z- _, N7 a6 }  System.out.println("wrong");
9 C" h7 l6 a! r# j0 W* h  e.printStackTrace(); ) o" ^' Y4 r3 `8 G
  }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-30 23:41 , Processed in 0.138763 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表