2

:)ネットワーク全体をスキャンして特定の開いているポートを見つける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;
    }
4

1 に答える 1

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;
    }
于 2013-07-08T17:36:40.580 に答える