我有android设备
此代码我向服务器发送消息:
DatagramPacket sentPacket = new DatagramPacket(MESSAGE.getBytes(), MESSAGE.length(), getBroadcastAddress(), DISCOVERY_PORT);
mSocket.send(sentPacket);
此代码我从服务器收到消息:
receivedPacket = new DatagramPacket(buffer, buffer.length);
mSocket.receive(receivedPacket);
一切都很好,但有时我会收到之前发送的消息。但服务器显示正确的发送数据。
有人知道这个问题吗?
答案 0 :(得分:0)
您正在广播数据包,因此您将通过网络接口进行备份。
您是否尝试根据源IP过滤收到的数据包? (如果源IP是您自己,则丢弃数据包)
有关详细信息,请参阅this question。
编辑:对于您的情况:
receivedPacket = new DatagramPacket(buffer, buffer.length);
mSocket.receive(receivedPacket);
String sourceIp = receivedPacket.getAddress().getHostAdress();
if(sourceIp != myIp) handle(receivedPacket);
答案 1 :(得分:-1)
你必须使用套接字吗?
为什么不使用GCM? enter link description here
它是Android解决方案的最佳选择。我试图用套接字实现它,但有很多问题。例如,您必须提供服务,并设置持续通知以将服务持久存储在内存中。