在不同的Android手机上接收UDP会得到不同的结果

在不同的Android手机上接收UDP会得到不同的结果,android,udp,android-wifi,galaxy,Android,Udp,Android Wifi,Galaxy,我愿意在我的android移动设备上创建一个服务器和客户端程序。 这些设备在同一wifi网络上相互通信,因此,必须实现一些简单的扫描机制——客户端电话通过某种广播搜索服务器电话 我所做的: 我的协议-客户端电话在wifi上广播消息端口p,服务器监听端口p。当服务器收到广播消息时,它会发回一条消息,从而向客户端发现自己 我的代码- 我在我的应用程序上打开了一个广播插座,它会发送广播消息。 同时,我的电脑上有一个python脚本,可以监听和回复——我使用python以便测试更容易——电脑上的Wire

我愿意在我的android移动设备上创建一个服务器和客户端程序。 这些设备在同一wifi网络上相互通信,因此,必须实现一些简单的扫描机制——客户端电话通过某种广播搜索服务器电话

我所做的:

我的协议-客户端电话在wifi上广播消息端口p,服务器监听端口p。当服务器收到广播消息时,它会发回一条消息,从而向客户端发现自己

我的代码- 我在我的应用程序上打开了一个广播插座,它会发送广播消息。 同时,我的电脑上有一个python脚本,可以监听和回复——我使用python以便测试更容易——电脑上的Wireshark,我可以看到所有东西

发生了什么:

当我使用我的Galaxy S手机时,它工作正常,我得到了回应。 当我使用另一部Galaxy S手机时,它不工作

这就是我所知道的: 工作的手机实际上有Nexus ROM。4.1.1 不工作的手机有2.3.3常规galaxy ROM

python代码表示,它接收两部手机发送的两个广播,并回复两部手机,不会引发任何异常

到目前为止,我认为问题可能是 1.旧版本的手机已经过时了。 2.windows防火墙 3.路由器防火墙

所以我打开了Wireshark,事实上,我看到两部手机都在发送广播——它是在Wireshark上登录的。 但是python脚本只响应了第一个脚本。 所以这就是为什么1和3是不相关的-如果路由器防火墙阻止了我的UDP,我仍然会看到python服务器的响应,与旧版本的电话一样

为了摆脱2,我刚刚禁用了windows防火墙-仍然存在同样的问题

有人知道为什么会发生这种效应吗

谢谢

编辑

我的python代码:

def scan(data, addr, sock):
    print "received scan message:", data, addr
    name = u"name".encode("utf-16-le")
    data = "DISC" + short2bytes(len(name)) + name
    print "sending back %s to %s" % (data, addr)
    sock.sendto(data, addr)

if __name__ == "__main__":
    sock = socket(AF_INET, SOCK_DGRAM)
    sock.bind(('', UDP_PORT))
    while 1:
        data, addr = sock.recvfrom(1500)
        print "received packet " + data
        if data.startswith("SCAN"):
            scan(data, addr, sock)
编辑2:

好的!看来我的代码和协议起作用了。 事实证明,2.3.3手机存在一些严重的ARP问题。
经过一些重置后,它的工作完美无瑕

你这么说-python代码说它接收两部手机发送的两个广播,并回复两部手机,没有引发任何异常。然后你这么说-但是python脚本只响应第一个。哪一个是正确的?python代码确实对两种广播都有响应-代码不会引发任何异常。但Wireshark表示,只有持有4.1.1版本的手机收到了回复