【问题标题】:android socket gets stuck after connection连接后android套接字卡住了
【发布时间】:2013-04-03 16:45:01
【问题描述】:

我正在尝试制作一个应用程序来扫描特定开放端口 (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 循环)也会在移动到下一个之前卡住很长时间。扫描每个主机也需要相当长的时间!

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

【问题讨论】:

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

标签: java android sockets ip port


【解决方案1】:

当没有Exception 被抛出时,你正在跳出循环。

你需要删除break;


解决您的新问题:

当然很慢。你期待什么?您正在尝试与子网中的每个 IP 建立连接,这需要时间。您似乎只是在尝试找出网络上可用的设备,因此您可以通过查看this 答案来稍微减少时间。他正在使用接受超时值的isReachable 方法中的构建。这仍然需要一些时间,但不会花费太多时间。

【讨论】:

  • 是的,您的回答有所帮助,但仍有一些问题,(请参阅编辑)如果我现在接受这个问题将被标记为已解决。解决后我会接受的
  • 看到我从你的第一个答案开始扫描,它仍然没有越过 192.168.1.190!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多