iPhone拒绝UDP数据包的可能原因有哪些?

4
在iPhone上,我正在运行一个使用AsyncUdpSocket库来处理UDP网络的应用程序。我已经进行了测试。我可以从我的iPhone发送UDP数据包到运行Java程序并正确接收UDP的服务器。

然而,当情况反过来时,Java程序的UDP消息无法传递到iPhone。因此,我决定测试库是否能够使用iPhone上的127.0.0.1发送/接收自己的UDP数据包,结果是可以的。

所以我想知道UDP数据包是否被发送了,于是我使用Wireshark查看我的网络活动。

alt text

上面图片的直链:http://img46.imageshack.us/img46/7939/screenshot20100220at110.png

在iPhone程序中,我指示我的UDP程序连接到192.168.99.11,这是我的MacBook,使用端口55555。我的Macbook上的Java UDP程序被告知要连接到远程IP 192.168.99.13(我的iPhone)的端口55555。

在Wireshark上,我可以看到ICMP告诉我从iPhone无法到达目标和端口。

那么有人知道为什么iPhone会阻止UDP数据包吗?还是我忽略了什么?

1个回答

2
除非我在理解您的问题时漏掉了什么,否则您有两个客户端风格的应用程序。两者都尝试连接到另一个主机上的端口55555。我不知道在单个框上如何运作。
让我描述正常的客户端-服务器(也称为主动/被动)场景:
1. 服务器创建UDP套接字并将其绑定到已知端口(例如您的55555端口), 2. 服务器调用套接字上的recv(2)系列函数以接受来自客户端的数据, 3. 客户端创建UDP套接字,并调用带有目标地址参数初始化为服务器IP地址和该已知端口号的sendto(2)函数。 4. 服务器从recv(2)返回客户端的数据, 5. 可选地,客户端和服务器交换更多消息。
关键是您需要在服务器端绑定已知端口。另一方面,服务器不需要知道客户端的地址和端口,因此服务器是被动的而客户端是主动的。我可能应该补充说,UDP应用程序同时扮演客户端和服务器的角色并不罕见。逻辑上这些是分开的角色。
解决问题可能有几个原因会收到“ICMP端口不可达”的响应:
1. 服务器机器上没有绑定该端口的进程(请参阅上面的第1点), 2. 服务器机器上的防火墙主动拒绝发送到该端口的数据包。
希望这能稍微澄清一下。如果我完全误解了您的问题,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接