2016-04-16 96 views
-1

尝试运行循环来检查IP是否打开。Android Socket连接

for (int z = 0; z < 100; z++) { 
    String ip = "10.0.0." + z; 
     try { 
      log(ip); 
      Socket socket = new Socket(ip, MainActivity._util.getPort()); 
      // Handle Stuff when Exception NOT throw 
     } catch (Exception e) { 
     } 
} 

日志是我做了一个函数(没有错误有)

.getPort()仅仅是一个“全球性”的端口,我定义数 编辑:返回2683(只是一个随机的编号)

它应该只是捕捉异常,然后继续for循环但不会发生。

目前这只是打印:

10.0.0.0 

10.0.0.1 

,然后冻结。

如果有人有任何建议,那就太棒了!

使用socket.connect(新的InetSocketAddress(IP,端口),超时)方法仍然没有正确处理

  • 这是一家的AsyncTask扩展分类编辑

    • ,在doInBackground()方法

  • +0

    您在此处获得的端口:*** MainActivity._util.getPort()***是否有可能在int循环中更改其值? –

    +0

    当ip为false时可能是个例外吗? – jgm

    +0

    @jgm你是什么意思与假IP? –

    回答

    2

    没有socket服务器来监听这些IP和端口。所以你的套接字客户端将被冻结。正如here所提到的,你应该使用另一个构造函数来设置套接字并设置超时时间以防止冻结。

    for (int z = 0; z < 100; z++) { 
        String ip = "10.0.0." + z; 
         try { 
          log(ip); 
          Socket socket = new Socket(); 
          socket.connect(new InetSocketAddress(ip, MainActivity._util.getPort()), 1000); 
          // Handle Stuff when Exception NOT throw 
         } catch (Exception e) { 
         } 
    }