从Android应用程序到本地服务器的多播消息

时间:2013-03-04 10:48:42

标签: java android sockets multicast

我正在开发一个Android应用程序,在某些时候发送多播消息。到目前为止,我在仿真器设备上运行它。

在同一台机器上,我有一台服务器(不是Android,一个普通的Java应用程序),它期待多播消息,但它永远不会得到它。当我启动服务器时,因为它在我的本地机器上,所以我启动了环回接口(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

不确定代码是否无效或我必须在模拟器设备中执行某些操作才能真正实现我的环回接口...任何想法?

谢谢! 亚历

1 个答案:

答案 0 :(得分:0)

android上的<127> 127.0.0.1指的是设备的localhost(或模拟器)。 要访问“本地计算机”的本地主机,您应该使用10.0.2.2。

这在很多主题中都有讨论。