在iPhone上,我正在运行一个带有AsyncUdpSocket库的应用来处理UDP网络。我测试了它。 我可以从我的iPhone发送UDP数据包到运行正确接受UDP的Java程序的服务器。
然而,当相反时,Java程序的UDP消息无法通过iPhone。所以我决定测试库是否可以发送/接收自己的UDP数据包或在iPhone上没有使用127.0.0.1,结果是有效的。
所以我想知道是否正在发送UDP数据包,所以我使用Wireshark来查看我的网络活动。
alt text http://img46.imageshack.us/img46/7939/screenshot20100220at110.png
直接链接到上面的图片:http://img46.imageshack.us/img46/7939/screenshot20100220at110.png
在iPhone程序中,我指示我的UDP程序使用端口55555连接到192.168.99.11,这是我的MacBook。我的Macbook上的Java UDP程序被告知要连接的远程ip是192.168.99.13 (我的iPhone)在55555端口。
在Wireshark上,我可以看到ICMP告诉我目标和端口无法从iPhone上访问。
那么有人知道为什么iPhone会阻止UDP数据包吗?或者有什么我忽略的?
答案 0 :(得分:2)
除非我在理解你的问题时遗漏了什么,否则你有两个客户端式的应用程序。两者都尝试连接到另一台主机上的端口55555。我不知道它如何在单个盒子上为你工作。
让我描述正常的客户端 - 服务器(a.k.a主动/被动)场景:
bind(2)
创建到已知端口(在您的示例中为55555),
recv(2)
- 套接字上的系列函数,用于接受来自客户端的数据,
sendto(2)
函数。
recv(2)
返回来自客户端的数据,
关键是您需要在服务器端绑定已知端口。另一方面,服务器不需要知道客户端的地址和端口,因此服务器是被动的并且客户端是活动的。我应该补充一点,UDP应用程序同时充当客户端和服务器并不罕见。从逻辑上讲,这些是不同的角色。
除此之外,可能有几个原因导致您获得“ICMP端口无法访问”响应:
希望这有点清除它。如果我严重误解了你的要求,请告诉我。