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