【发布时间】:2010-09-08 15:57:25
【问题描述】:
我为此使用了 Objective-C 和 Java,但我认为这个问题与语言无关。
我有一个通过 TCP/IP 与 Java 服务器通信的 iOS 客户端。现在我需要至少告诉其中一方对方的 IP 地址。有没有一种标准方法可以“发现”IP 地址(从一侧或另一侧)?
另外,切换到 UDP 会如何影响答案?
【问题讨论】:
我为此使用了 Objective-C 和 Java,但我认为这个问题与语言无关。
我有一个通过 TCP/IP 与 Java 服务器通信的 iOS 客户端。现在我需要至少告诉其中一方对方的 IP 地址。有没有一种标准方法可以“发现”IP 地址(从一侧或另一侧)?
另外,切换到 UDP 会如何影响答案?
【问题讨论】:
有许多协议可用于发现网络上的其他设备/服务器。 iOS 领域中最常用的一种是“Bonjour”。查看 Apple 的示例应用程序。
【讨论】:
是否有一种标准方法可以“发现”IP 地址(从一侧或另一侧)?
是的,它被称为“端口嗅探”,肯定会给您带来麻烦,因为它是一种常见的攻击。
您只需尝试一个范围内的所有 IP 地址。许多防火墙产品会将此视为“入侵”尝试,并使用入侵检测软件记录您。
我们几乎从不“发现”地址。
这就是“域名”的用途。
【讨论】:
为什么服务器不能有一个众所周知的 DNS 名称?
【讨论】:
broadcast_addr = (ip_addr & subnet_mask) | ^subnet_mask;。例如,如果您的客户端的 LAN IP 为 192.168.0.1,子网掩码为 255.255.255.0,则子网的广播 IP 为 192.168.0.255。一旦你有了它,你就可以向该 IP 发送一个普通的 UDP 数据包,其中包含你想要的任何内容。如果你的 UDP 监听服务器绑定在同一子网上的 IP,那么它可以通过正常的读取操作接收 UDP 数据包。