我正在开发一个 Android 应用程序,它在某些时候会发送多播消息。到目前为止,我正在模拟器设备上运行它。
在同一台机器上,我有一个服务器(不是 Android,一个普通的 Java 应用程序)期待多播消息,但它永远不会得到它。当我启动服务器时,因为它在我的本地机器上,所以我启动它的环回接口(127.0.0.1
)。我必须说,我已经用常规的 Java 应用程序完成了这项工作,而且效果很好。
这是Android应用程序的代码:
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
.
不太确定代码是否不起作用,或者我必须在模拟器设备中做一些事情,这样它才能真正到达我的环回接口......有什么想法吗?
谢谢!亚历克斯