У меня есть случай, когда мне нужно отправить широковещательный запрос UDP в Wi-Fi на определенный порт, и конкретные устройства, которым я звоню, должны вернуть некоторую информацию, чтобы я мог определить, сколько их в этой сети.
Пока у меня есть это:
public class UDP extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
String text = "";
int server_port = 7432;
DatagramPacket receivePacket = null;
DatagramSocket clientSocket = null;
try {
clientSocket = new DatagramSocket();
clientSocket.setSoTimeout(5);
InetAddress IPAddress = InetAddress.getByName("255.255.255.255");
byte[] sendData = ("02904").getBytes();
byte[] receiveData = new byte[12];
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, server_port);
clientSocket.send(sendPacket);
receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
Log.e("Receiving response", "Response");
text = new String(receivePacket.getData());
clientSocket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
Log.e("Receiving response", "Response");
assert receivePacket != null;
text = new String(receivePacket.getData());
clientSocket.close();
} catch (IOException e) {
Log.e("Receiving response", "Response");
assert receivePacket != null;
text = new String(receivePacket.getData());
clientSocket.close();
}
return text;
}
@Override
protected void onPostExecute(String s) {
Log.e("Socket response", s);
}
}
Тестирование с 1 устройством в сети возвращает странные треугольники с вопросительными знаками в них (я не уверен, но думаю, что-то с кодировкой), но моя настоящая проблема заключается в том, что я не знаю, как получить список, например, и заполнить это со всеми устройствами, которые ответили. Как получить каждый ответ и сохранить его как другой ответ, чтобы я мог их проанализировать?
Все, что я знаю по запросу, находится в коде. Ответ будет byte[]
с размером 12 и информацией об устройстве.