【问题标题】:How can I know the IP address of a remote host by using UDP broadcast message?如何使用 UDP 广播消息知道远程主机的 IP 地址?
【发布时间】:2010-05-11 11:05:43
【问题描述】:

我正在开发一个嵌入式系统,并且对这个 TCP\IP 非常陌生。我的问题是,一旦我在本地网络中安装了我的板并且该板将动态获取其 IP 地址,它必须与在网络中的一台 PC(DHCP 服务器除外)上运行的客户端应用程序通信。要与这个新板通信,客户端应用程序需要知道板的 IP 地址。有什么办法知道板子的IP地址? UDP 广播会为此目的工作吗?如果是,请详细解释,因为我无法理解。如果可能,请提供一些 C 语言示例代码。

【问题讨论】:

  • 这个很模糊……你有什么样的环境? Linux、Windows...了解您是否想要代码示例很重要。
  • 实际上我没有在使用飞思卡尔微控制器的任何操作系统
  • 寻找UDP广播报文的源地址这里回答,stackoverflow.com/questions/2741936/…

标签: c udp broadcast


【解决方案1】:

基本思路是:

  • 嵌入式系统软件打开一个 UDP 套接字,将其绑定到一个已知端口,并将 SO_BROADCAST 套接字选项设置为 setsockopt()。然后它会调用recvfrom() 循环等待数据包。
  • 定义允许指定数据包类型的数据包格式。定义“发现”数据包类型。
  • 如果嵌入式系统收到“发现”数据包,它会使用可能包含其名称/序列号/正常运行时间/状态的数据包来响应发送者。
  • 客户端软件打开一个 UDP 套接字,设置 SO_BROADCAST 套接字选项并向已知端口和本地广播地址发送一个“发现”类型的数据包。
  • 客户端软件使用recvfrom() 等待来自每个嵌入式系统的响应,并记录每个嵌入式系统的地址。
  • 客户端选择一个嵌入式设备并开始直接与其通信。

【讨论】:

  • 谢谢,通过使用这种方式,我假设客户端软件将知道 MAC ID 和 IP 地址,然后开始与设备通信。
  • 您的微控制器上的 IP 堆栈是否支持 ARP?
【解决方案2】:

我不知道您的资源有多么有限,但最好的解决方案是在您的板上包含一个 mDNS 解决方案,例如 http://avahi.org/。有针对嵌入式平台的特定配置。

这样做的好处是,您将与标准的服务发现机制挂钩,如果您能与其他人相处融洽,这将为您带来很多好处。 Avahi 是 LGPL,但还有其他版本是 BSD 和 ASPL 的某些版本(?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2013-08-05
    • 2012-06-23
    • 2012-03-01
    • 2016-07-24
    相关资源
    最近更新 更多