发送多播UDP并等待响应

时间:2013-08-06 13:45:16

标签: android udp multicast

在我的网络中,我有几个设备(linux,c ++)和一个Android智能手机 现在,为了识别网络中的设备,我使用以下代码从android智能手机发送多播udp数据包:

public class SSDPSocket {
    SocketAddress mSSDPMulticastGroup;
    MulticastSocket mSSDPSocket;
    InetAddress broadcastAddress;

    public SSDPSocket() throws IOException {
        mSSDPSocket = new MulticastSocket(55325);
        broadcastAddress = InetAddress.getByName(SSDPConstants.ADDRESS);
        mSSDPSocket.joinGroup(broadcastAddress);
    }

    public void send(String data) throws IOException {
        DatagramPacket dp = new DatagramPacket(data.getBytes(), data.length(), broadcastAddress, SSDPConstants.PORT);
        mSSDPSocket.setTimeToLive(2);
        mSSDPSocket.send(dp);
    }

    public void receive() {
        // TODO: Implement!
    }
}

我发送udp数据包的地址是239.255.255.250,端口是1900。 这很好,我能够在我的客户端收到数据包 现在我有实现receive方法的问题。在这种方法中,我希望从网络中的所有我的特殊设备接收响应。首先,客户必须回复发件人地址(智能手机的IP)吗?那么我会在receive()方法中得到一些循环,我可以接收到udp响应的权利吗?

我必须为此开一个新的DatagramSocket吗?或者我可以使用已经打开的MulticastSocket作为回复吗?在示例中,我发现每个人都使用已打开的MulticastSocket作为响应,但是如果MulticastSocket绑定到239.255.255.250,这应该如何工作?

1 个答案:

答案 0 :(得分:1)

首先看起来Android可能会要求您获取锁定,以免忽略多播数据包。所以这可能需要考虑。

http://www.whizzosoftware.com/forums/blog/1/entry-40-android-jmdns-and-wi-fi-multicast-packets/

第二,你的接收需要被困在一个循环中。

这可能对两者都有帮助:Problem with MulticastSocket on Java-Android原始海报会在一段时间内接收到它们。