#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 секунд.