2013-04-03 31 views
0

我正在尝试制作一个应用程序,扫描特定打开端口(5050)的范围内的所有IP,并且如果它打开,请在LOG上写入一些消息。Android套接字在连接后卡住

继承人的代码:

public void run(){ 
     for(int i=0;i<256;i++) 
     { 
      Log.d("NetworkScanner","attemping to contact 192.168.1."+i); 
      try { 
       Socket socket=new Socket(searchIP+i,5050); 
       possibleClients.add(searchIP); 
       socket.close(); 

       Log.d("NetworkScanner"," 192.168.1."+i+" YEAAAHHH"); 

      } catch (UnknownHostException e) { 

       Log.d("NetworkScanner"," 192.168.1."+i+" unavailable"); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 

    } 

编辑:这里有一个新的问题:即使主机在网上发现没有打开的端口扫描程序(用于环路)粘贴很长一段时间移动到下一个前。同时扫描每台主机也需要相当长的时间!

唷最终的解决方案是使用默认的构造函数Socket对象然后创建的InetAddr对象为主机,然后以毫秒为单位使用socket API的连接(的InetAddr,超时)函数超时(约300毫秒),扫描在仅300毫秒或更小的每个IP(小于200毫秒可能给出错误)和多线程中并行make扫描它快5秒来扫描范围内的所有IP地址..

+0

Phew最终的解决方案是使用默认构造函数创建一个Socket对象,然后为主机创建InetAddr对象,然后使用连接(InetAddr,超时)函数以毫秒(约300毫秒)超时扫描每个IP在短短300毫秒或更小(小于200毫秒可能会给出错误)和多线程并行扫描化妆它一样快,5秒钟扫描范围内的所有IP地址.. 感谢大家的答复 – Allahjane

回答

2

你会崩溃的循环时,没有Exception被抛出。

您需要删除break;


为了解决您的新的问题:

当然,它的速度慢。你期望什么?您正尝试建立到子网中每个IP的连接,这需要时间。看起来你只是想弄清楚网络上有哪些设备可用,所以你可以通过查看this的答案来减少时间。他正在使用接受超时值的isReachable方法。它仍然需要一些时间,但没有那么多时间。

+0

哎呀对不起队友 – Allahjane

+0

是的,你的回答很有帮助,但是还有一些问题,(如果我接受了这个编辑)现在问题会被标记为已解决。我会尽快接受它 – Allahjane

+0

看到我开始扫描,因为你的第一个答案,它仍然没有越过192.168.1.190! – Allahjane

0

删除“打破;” ...它停止迭代。