在我的网络中,我有几台设备(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
,这应该如何工作?MulticastSocket
239.255.255.250