android socket在连接后卡住了

时间:2013-04-03 16:45:01

标签: java android sockets ip port

我正在尝试制作一个应用程序,扫描特定打开端口(5050)范围内的所有ip,如果打开则在LOG上写一些消息。

继承人代码:

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

        }

    }
编辑:这是一个新问题:即使在没有端口打开的情况下在线发现主机,扫描过程(for循环)也会长时间停留,然后再转到下一个。扫描每个主机也需要相当长的时间!

Phew最后的解决方案是使用默认构造函数创建一个Socket对象,然后为主机创建InetAddr对象,然后使用套接字api的Connect(InetAddr,timeout)函数,以超时(毫秒)(大约300毫秒)扫描每个ip只需300毫秒或更短时间(少于200毫秒可能会出错)并且多线程并行扫描使得扫描范围内的所有IP的速度最快可达5秒。

2 个答案:

答案 0 :(得分:2)

当没有抛出Exception时,你正在脱离循环。

您需要删除break;


解决您的新问题:

当然很慢。你有什么期望?您正在尝试与子网中的每个IP建立连接,这需要时间。您似乎只是想弄清楚网络上有哪些设备可用,因此您可以通过查看this答案来缩短时间。他正在使用isReachable方法构建,该方法接受超时值。它仍然需要一些时间,但不是那么多时间。

答案 1 :(得分:0)

删除“break;”...它会停止迭代。