• JAVA中的Ping和Telnet 分类: java 20091130 22:56 450人阅读 评论(0) 收藏


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

    InetAddress对象的常用方法

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

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

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

    String getHostAddress() 获取IP地址的字符串,返回为一个String,【以文本表现形式】:207.46.193.254

    String getHostName() 获取此IP地址的主机名,www.microsoft.com

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

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

             }

            System.out.println("本机地址:"+InetAddress.getLocalHost());

         }

    }

    这个例子首先是获取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

    本机地址:icbcoa-d5332a43/192.168.1.4


    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 (Echo) 上建立 TCP 连接。

     如果要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();
             }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jackyrongvip/archive/2009/11/13/4809410.aspx

  • 相关阅读:
    Git哲学与使用
    save
    http://www.onvif.org/onvif/ver20/util/operationIndex.html
    图标
    C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍(转)
    一种基于PTP 协议的局域网高精度时钟同步方法(转)
    WPF中的数据模板(DataTemplate)(转)
    WPF中的ControlTemplate(控件模板)(转)
    也来说说C#异步委托(转)
    C#委托的介绍(delegate、Action、Func、predicate)(转)
  • 原文地址:https://www.cnblogs.com/configman/p/4657650.html
Copyright © 2020-2023  润新知