Android: сканирование IP-адреса сервера сокетов TCP (известен порт ist)

#android #arrays

#Android #массивы

Вопрос:

Я сканирую свою подсеть на наличие серверов сокетов с открытым портом 7 и использую параллельные потоки. Я всегда вижу снимок «подключиться» и «отключить» на стороне сервера, поэтому базовый код должен быть в порядке.

Но как мне собрать найденные (успешно подключенные) IP-адреса сервера в массив?

Любая помощь будет принята с благодарностью!

 public class MainActivity extends Activity{
Button buttonConnect;

Socket socket = null;
int port = 7;
int timeout = 200;

final ExecutorService es = Executors.newFixedThreadPool(20);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttonConnect = (Button) findViewById(R.id.button1);

    buttonConnect.setOnClickListener(buttonConnectOnClickListener);

}

Button.OnClickListener buttonConnectOnClickListener = new Button.OnClickListener() {

    @Override
    public void onClick(View v) {

        String iIPv4 = "192.168.0.1";
        iIPv4 = iIPv4.substring(0, iIPv4.lastIndexOf("."));
        iIPv4  = ".";

        for (int i = 1; i < 255; i  ) {
            findSocket(es, iIPv4   i, port, timeout);
        }
    }
};

public static Future<Boolean> findSocket(final ExecutorService es,
        final String ip, final int port, final int timeout) {
    return es.submit(new Callable<Boolean>() {
        @Override
        public Boolean call() {
            try {
                Socket socket = new Socket();
                socket.connect(new InetSocketAddress(ip, port), timeout);
                socket.close();
                return true;
            } catch (Exception ex) {
                return false;
            }
        }
    });
}
 

}

Комментарии:

1. Итак, ваш вопрос не о том, о чем говорится в вашем названии, а о тривиальном вопросе о структуре данных?

Ответ №1:

 ArrayList<String> arrayList = new ArrayList<String>();
 

затем в try блоке findSocket перед return true;

 arayList.add(ip);
 

Комментарии:

1. Спасибо за ваш ответ. К сожалению, ArrayList всегда имеет длину / размер 0.

2. Мне также пришлось добавить тайм-аут 7 секунд, чтобы заставить этот код работать. Для сканирования подсети требуется ~ 30 секунд.