在我的网络中,我有几个设备(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
,这应该如何工作?
答案 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原始海报会在一段时间内接收到它们。