为什么有时Android设备会收到自己的消息

时间:2014-07-10 14:42:05

标签: android sockets udp

我有android设备

此代码我向服务器发送消息:

DatagramPacket sentPacket = new DatagramPacket(MESSAGE.getBytes(), MESSAGE.length(), getBroadcastAddress(), DISCOVERY_PORT); 
mSocket.send(sentPacket);

此代码我从服务器收到消息:

    receivedPacket = new DatagramPacket(buffer, buffer.length);
    mSocket.receive(receivedPacket);

一切都很好,但有时我会收到之前发送的消息。但服务器显示正确的发送数据。

有人知道这个问题吗?

2 个答案:

答案 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解决方案的最佳选择。我试图用套接字实现它,但有很多问题。例如,您必须提供服务,并设置持续通知以将服务持久存储在内存中。