A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王建雨 中级黑马   /  2012-6-24 12:36  /  1454 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class IpAddress implements Runnable {
        ArrayList<InetAddress> arrayList = new ArrayList<InetAddress>();

        @Override
        public synchronized void run() {

                try {
                        InetAddress localIp = InetAddress.getLocalHost();
                        String[] ipAddress = (localIp.getHostAddress()).split("\\.");
                        String ipAd = ipAddress[0] + "." + ipAddress[1] + "."
                                        + ipAddress[2] + ".";
                        for (int i = 2; i < 255; i++) {
                                String ipAdd = ipAd + i;
                                // System.out.println(ipAdd);
                                InetAddress ipL = InetAddress.getByName(ipAdd);
                                // System.out.println(ipL.toString());
                                if (ipL.isReachable(3000) == true) {
                                        System.out.println(ipL);
                                        arrayList.add(ipL);
                                }
                        }

                } catch (UnknownHostException e) {
                        // TODO Auto-generated catch block

                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }

}

错在哪里?

4 个回复

倒序浏览
本帖最后由 周兴中 于 2012-6-24 14:20 编辑

你还没有在主函数中启动线程
new Thread(new IpAddress()).start();  

if (ipL.isReachable(3000) == true) {  //isReachable测试是否可以达到该地址。实现尽最大努力试图到达主机,只是防火墙和服务器配置可能阻塞请求,使其在某些特定的端口可以访问时处于不可到达状态。如果可以获得权限,则典型实现将使用 ICMP ECHO REQUEST;否则它将试图在目标主机的端口 7 (Echo) 上建立 TCP 连接。
超时值(以毫秒为单位)指示尝试应该使用的最大时间量。如果在获取应答前操作超时了,则视为主机不可到达。所以你至少要等3*252秒才能看到结果.

                                        System.out.println(ipL);
                                        arrayList.add(ipL);
                                }

回复 使用道具 举报
  if (ipL.isReachable(3000) == true) {
                                         System.out.println(ipL);
                                         arrayList.add(ipL);
                                 }
ipL.isReachable(3000) == true --> ipL.isReachable(3000)  
isReachable()返回的就是boolean
回复 使用道具 举报
还有没具体的回答?
回复 使用道具 举报
还有没具体的回答?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马