3

在我的网络中,我有几台设备(linux、c++)和一部安卓智能手机。
现在,为了识别网络中的设备,我使用以下代码从 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。这工作正常,我能够在我的客户端上接收数据包。
现在我在实现接收方法时遇到了问题。在这种方法中,我想从网络中的所有特殊设备接收响应。首先,客户必须回复发件人地址(我的智能手机的 ip),对吗?然后我会在方法中有某种循环receive(),我可以接收传入的 udp 响应,对吗?

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

4

1 回答 1

1

首先看起来 Android 可能要求您获取锁,以不忽略多播数据包。所以这可能是需要研究的东西。

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

其次,您的接收需要停留在一个while循环中。

这可能对您都有帮助:Java-Android 上 的 MulticastSocket 问题 原始海报在 while 循环中接收。

于 2013-08-06T13:59:52.140 回答