适用于Android的套接字扫描

时间:2013-07-08 17:15:08

标签: java android sockets timeout

:)我正在尝试创建一个Android应用程序,它将扫描整个网络以查找特定的开放端口。我正在使用Android Studio(Windows)和模拟器。我可以在程序停止运行之前扫描网络90秒。我没有收到任何logcat错误,我在调试器中丢失了堆栈和程序计数器。没有首先重新启动模拟器,我无法重新启动程序。看起来我失去了对模拟器的任何连接。

我还应该提到删除套接字连接线会导致任务无限期地运行。以前有没有人经历过这样的时间?

任何指向正确方向的人都会非常感激!!

珍妮

private class getNetworkState extends AsyncTask<Integer, Integer, Integer> {
    @Override
    protected Integer doInBackground(Integer... params) {

        for (int subnet2 = 216; subnet2 < 220; subnet2++)
        {
            for (int subnet = 0; subnet < 255; subnet++)
            {
                // open a tcp socket
                String server = String.format("192.168.%d.%d", subnet2, subnet);
                Socket socket = new Socket();
                try
                {
                    socket.connect(new InetSocketAddress(server, port), timeOut);
                    System.out.println("Network state of " + server + " == " + socket.isConnected());
                    socket.close();
                }
                catch (Exception e)
                {
                    System.out.println("Network state of " + server + " == " + e);
                }
            }
        }
        return 1;
    }

1 个答案:

答案 0 :(得分:1)

您多久见一次socket.connect(...)中的异常?代码存在的方式,连接失败将抛出异常,套接字将不会被关闭。

我认为更好的做法是关闭finally块中的套接字。如果您的问题的原因是大量的开放套接字,这可能有助于解决问题。

private class getNetworkState extends AsyncTask<Integer, Integer, Integer> {
    @Override
    protected Integer doInBackground(Integer... params) {

        for (int subnet2 = 216; subnet2 < 220; subnet2++)
        {
            for (int subnet = 0; subnet < 255; subnet++)
            {
                // open a tcp socket
                String server = String.format("192.168.%d.%d", subnet2, subnet);
                Socket socket = new Socket();
                try
                {
                    socket.connect(new InetSocketAddress(server, port), timeOut);
                    System.out.println("Network state of " + server + " == " + socket.isConnected());
                }
                catch (Exception e)
                {
                    System.out.println("Network state of " + server + " == " + e);
                } finally {
                    socket.close();
                }
            }
        }
        return 1;
    }