Я разрабатываю приложение для Android, которое в некоторых случаях отправляет многоадресное сообщение. До сих пор я запускаю это на эмуляторе.Сообщение многоадресной рассылки от приложения Android к локальному серверу
На том же компьютере у меня есть сервер (а не Android, простое Java-приложение), ожидающее сообщения многоадресной рассылки, но он никогда не получает его. Когда я запускаю сервер, так как он находится на моем локальном компьютере, я запускаю его loopback-интерфейс (127.0.0.1
). Должен сказать, что я сделал это с помощью обычных приложений Java, и он отлично работает.
Вот код для Android App:
try {
InetAddress group = InetAddress.getByName(MULTICAST_HOST);
byte[] data = DISCOVER_MESSAGE.getBytes();
DatagramSocket ds = new DatagramSocket();
ds.setSoTimeout(60000);
DatagramPacket dp = new DatagramPacket(data, data.length, group, TcpipSIBDiscoverer.PORT);
ds.send(dp);
byte[] buf = new byte[1024];
dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);
if (dp.getLength() > 0) {
byte[] tmp = new byte[dp.getLength()];
System.arraycopy(dp.getData(), 0, tmp, 0, tmp.length);
String received = new String(tmp);
Logger.debug(this, "Received from SIB: " + received);
SIBDescriptor sibDescriptor = createSIBDescriptor(received);
this.discoveryListener.connectorSIBDiscovered(sibDescriptor);
}
} catch (SocketTimeoutException e) {
Logger.error("Socket time excedeed while waiting a response when discovering SIBs. Trying again");
} catch (IOException e) {
Logger.error("There was some kind of IO error while waiting for a response when discovering SIBs. Trying again");
}
Как вы можете видеть, я использую обычный DatagramSocket
вместо MulticastSocket
. Это работает в простых Java-приложениях, поскольку адрес сервера прослушивания 235.0.0.1:5555
.
Не уверен, что код не работает, или я должен что-то сделать в эмуляторе, чтобы он мог действительно достичь моего интерфейса loopback ... Любые идеи?
Спасибо! Alex
Я просто прочитал: «В зависимости от среды эмулятор может не поддерживать другие протоколы (например, ICMP, используемые для« ping »), возможно, не поддерживается. В настоящее время эмулятор не поддерживает IGMP или многоадресную рассылку . "в http://developer.android.com/tools/devices/emulator.html#connecting. Поэтому я предполагаю, что я вынужден использовать реальное устройство для этого ... – AlejandroVK
Я проверил, что этот код работает прямо на реальном устройстве, поэтому это просто эмулированные устройства, которые не поддерживают многоадресные сообщения, так как наименее, еще не ... – AlejandroVK