我正在开发一个嵌入式系统,对这个TCP \ IP很新。我的问题是,一旦我将我的主板安装在本地网络中,并且此主板将动态获取其IP地址,它必须与在网络中的一台PC(除DHCP服务器之外)上运行的客户端应用程序进行通信。为了与这个新电路板进行通信,客户端应用程序需要知道电路板的IP地址。知道电路板IP地址的方法是什么? UDP广播会为此目的工作吗?如果是,请详细解释,因为我无法理解。如果可能,请在C中提供一些示例代码。如何使用UDP广播消息知道远程主机的IP地址?
1
A
回答
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(?)
相关问题
- 1. 获取远程主机IP地址QTcpServer
- 2. UDP广播或IP多播?
- 3. 在局域网中用假源IP与delphi广播UDP消息
- 4. WCF服务地址的UDP广播
- 5. 如何知道广域网IP是否发生了变化并接收到大量的IP地址广播
- 6. 使用远程计算机获取远程计算机的IP地址IP地址
- 7. 如何让Docker容器向对方广播其IP地址或主机名?
- 8. 使用广播IP地址和MAC地址发出TCP请求
- 9. UDP Socket连接 - 广播/听消息
- 10. UDP广播 - Android应用程序请求Java服务器IP地址
- 11. 远程IP地址
- 12. 使用SMTP与主机的IP地址
- 13. vb6从本地主机或远程IP地址检索IPV6
- 14. 如何以编程方式启用UDP/IP广播?
- 15. 如何使用Bukkit广播消息?
- 16. 如何从centos主机到windows机器远程访问docker0 ip地址
- 17. 连接到广播IP地址
- 18. 如何使Silverlight客户端知道用户的IP地址
- 19. 如何使用从源地址到目标主机的IP地址发送udp数据包?
- 20. 在所有NIC上使用IPv4和IPv6广播UDP消息
- 21. 使用rmi注册表确定java rmi远程对象主机的IP地址
- 22. GetExtendedUdpTable和远程IP地址
- 23. 本地UDP广播性能
- 24. iOS UDP广播与PHP UDP广播
- 25. 查找UDP广播源IP与SDL_Net
- 26. 进程对同一主机名使用不同的IP地址
- 27. 我如何知道Git存储库的远程地址?
- 28. 当我只知道它是IP地址时,如何获得远程系统的MAC地址?
- 29. 将UDP消息广播到所有可用的网卡
- 30. 如何在Eureka中使用IP地址而不是主机名?
这很模糊......你有什么样的环境? Linux,Windows ...知道你是否想要代码示例很重要。 – Simon 2010-05-11 11:12:21
其实我没有在任何操作系统上工作,我在飞思卡尔微控制器上工作 – user338179 2010-05-12 04:11:33
查找UDP广播消息的源地址在这里得到了解答,http://stackoverflow.com/questions/2741936/c-linux-receiving-data-from-多播多播地址在同一端口如何到DI – 2010-05-12 10:09:26