2010-05-11 100 views
1

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

+0

这很模糊......你有什么样的环境? Linux,Windows ...知道你是否想要代码示例很重要。 – Simon 2010-05-11 11:12:21

+0

其实我没有在任何操作系统上工作,我在飞思卡尔微控制器上工作 – user338179 2010-05-12 04:11:33

+0

查找UDP广播消息的源地址在这里得到了解答,http://stackoverflow.com/questions/2741936/c-linux-receiving-data-from-多播多播地址在同一端口如何到DI – 2010-05-12 10:09:26

回答

1

的基本思路是:

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

谢谢,通过使用这种方式,我假设客户端软件将知道MAC ID和IP地址,然后将开始与设备进行通信。 – user338179 2010-05-12 04:19:15

+0

微控制器上的IP协议栈是否支持ARP? – caf 2010-05-12 05:08:32

0

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

这样做的有益之处在于,如果您可以与其他人打好关系,那么您将会挂钩到服务发现的标准机制中,该服务发现会为您购买很多服务。 Avahi是LGPL,但还有其他版本是某些版本的BSD和ASPL(?)