2013-04-03 80 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

刪除「打破;」 ...它停止迭代。