如何使用UDP广播消息知道远程主机的IP地址?

时间:2010-05-11 11:05:43

标签: c udp broadcast

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

2 个答案:

答案 0 :(得分:1)

基本理念是:

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

答案 1 :(得分:0)

我不知道您的资源有多受限制,但最好的解决方案是在您的主板上添加http://avahi.org/等mDNS解决方案。有针对嵌入式平台的特定配置。

这样做的有益之处在于,如果您能够与他人合作,您将会接触到服务发现的标准机制,这会给您带来很多好处。 Avahi是LGPL,但还有其他版本的BSD和ASPL(?)