JAVA里的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地址的主机名

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

 


packageorg.dakiler.javanet.chapter1;
importjava.net.InetAddress;
publicclassExample3
{
publicstaticvoidmain(Stringargs[])throwsException
{
InetAddressaddress=InetAddress.getByName("www.microsoft.com");
System.out.println("ip:"+address.getHostAddress());
System.out.println("host:"+address.getHostName());
System.out.println("canonicalhostname:"+address.getCanonicalHostName());
byte[]bytes=address.getAddress();
for(byteb:bytes)
{
if(b>=0)System.out.print(b);
elseSystem.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
canonicalhostname: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是超时时间。一个简单的例子如下:

 


packageorg.dakiler.javanet.chapter1;
importjava.net.InetAddress;
publicclassExample4
{
publicstaticvoidmain(Stringargs[])throwsException
{
InetAddressaddress1=InetAddress.getLocalHost();
InetAddressaddress2=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的话,会比较准确,比如以下代码

 


//TODOAuto-generatedmethodstub
Socketserver=null;
try{
server=newSocket();
InetSocketAddressaddress=newInetSocketAddress("bbs.sysu.edu.cn",23);
server.connect(address,5000);
System.out.println("ok!");
}
catch(UnknownHostExceptione){
System.out.println("wrong!");
e.printStackTrace();
}catch(IOExceptione){
System.out.println("wrong");
e.printStackTrace();
}

标签: 用法TELNETJAVA
------分隔线----------------------------
· 首页 · 注册

百鸣[Baiming.org]欢迎您 百鸣[Baiming.org]欢迎您~