Я пытаюсь реализовать, чтобы мое приложение могло получать некоторые широковещательные сообщения. Одно устройство отправляет сообщения на адрес 192.168.2.255. Я вижу на Wireshark, что это работает. Мое приложение должно получать эти сообщения, но оно еще не работает. Это мой код:
int port = 3123;
// Create a socket to listen on the port.
DatagramSocket dsocket = new DatagramSocket(port);
dsocket.setBroadcast(true);
// Create a buffer to read datagrams into. If a
// packet is larger than this buffer, the
// excess will simply be discarded!
byte[] buffer = new byte[1024];
// Create a packet to receive data into the buffer
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
// Now loop forever, waiting to receive packets and printing them.
while (true) {
// Wait to receive a datagram
dsocket.receive(packet);
// Convert the contents to a string, and display them
String msg = new String(buffer, 0, packet.getLength());
System.out.println(packet.getAddress().getHostName() + ": " + msg);
// Reset the length of the packet before reusing it.
packet.setLength(buffer.length);
res = msg;
Log.d("mainGate_bc", res);
}
} catch (Exception e) {
System.err.println(e);
}
Программа застряла на строке dsocket.receive(packet). Ничего не приходит в мое приложение, пока другое устройство отправляет свои пакеты.
Эти разрешения я пробовал:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
Любая идея, почему это не работает? Какие-то дополнительные разрешения? Настройки на устройстве Android?
receive()
? Если нет, посмотрите здесь для периодических прерываний по блокирующему вызову. - person Onik   schedule 23.10.2016DatagramSocket dsocket = new DatagramSocket(null); dsocket.setReuseAddress(true); dsocket.setBroadcast(true); dsocket.bind(new InetSocketAddress(port));
- person Onik   schedule 23.10.2016receive()
... Попробуйте отправлять пакеты и получать их на одном устройстве. - person Onik   schedule 23.10.2016