【问题标题】:What are some possible causes of iPhone rejecting UDP packet?iPhone拒绝UDP数据包的一些可能原因是什么?
【发布时间】:2010-02-20 16:31:27
【问题描述】:

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

但是,如果反过来,Java 程序的 UDP 消息就无法到达 iPhone。 所以我决定测试该库是否可以发送/接收自己的 UDP 数据包或不在 iPhone 上使用 127.0.0.1,结果它可以工作。

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

直接链接到上图: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 数据包吗?还是我忽略了什么?

【问题讨论】:

    标签: java iphone networking sockets udp


    【解决方案1】:

    除非我在理解您的问题时遗漏了一些东西,否则您有两个客户端样式的应用程序。两者都尝试连接到另一台主机上的端口 55555。我不知道它是如何在单个盒子上为您工作的。

    让我描述一下普通的客户端-服务器(a.k.a 主动/被动)场景:

    1. 服务器创建 UDP 套接字并将其bind(2)s 到已知端口(在您的示例中为 55555),
    2. 服务器调用套接字上的recv(2)-family 函数来接受来自客户端的数据,
    3. 客户端创建 UDP 套接字并调用 sendto(2) 函数,其目标地址参数由服务器的 IP 地址和已知端口号初始化。
    4. 服务器从recv(2)返回客户端的数据,
    5. 客户端和服务器可选地交换更多消息。

    关键是你需要在服务器端绑定已知端口。另一方面,服务器不需要知道客户端的地址和端口,因此服务器是被动的,客户端是主动的。我可能应该补充一点,UDP 应用程序同时充当客户端和服务器的情况并不少见。从逻辑上讲,这些是不同的角色。

    顺便说一句,您收到“ICMP 端口无法访问”响应可能有几个原因:

    • 没有进程绑定到服务器机器上的端口(参见上面的第 1 点),
    • 服务器计算机上的防火墙主动拒绝发送到该端口的数据包。

    希望这能稍微清除一下。如果我严重误解了您的要求,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2017-08-12
      • 2013-02-16
      • 2021-09-01
      相关资源
      最近更新 更多