0.Part2:mDNS实现之Bonjour与Avahi(二)——win/linux/arm交叉编译_平凡之路-CSDN博客1.BonjourBonjour - Apple Developer● 源码(mDNSResponder-878.70.2):https://opensource.apple.com/tarballs/mDNSResponder/● Bin&SDK:https://developer.apple.com/download/all/?q=Bonjour%20SDK%20for%20WindowsBonjour-winBonjour...https://blog.csdn.net/qq_23958061/article/details/122092864?spm=1001.2014.3001.5502
1.Windows
Bonjour - Apple Developerhttps://developer.apple.com/bonjour/
Bonjour SDK for Windowshttps://developer.apple.com/download/all/?q=Bonjour%20SDK%20for%20Windows
下载上面官网sdk,安装(Bonjour服务启动,依赖于mDNSResponder.exe进程),C#在工程中添加COM组件即可使用。
源码参考(C#参考DNSServiceBrowser.NET工程):
Source Codehttps://opensource.apple.com/tarballs/mDNSResponder/
源码目录分析可参考其他文章:
2.Linux及ARM交叉编译、部署
linux参考下面文章:[从0到1搭嵌入式工程]局域网自动发现功能,苹果Bonjour/mdnsResponder移植_SevenFighting的专栏-CSDN博客在局域网内通信,就必须知道对方的IP地址和端口,苹果开源的mdnsResponder,就是利用mdns组播协议,通过服务域名,来获取相应ip地址的一种方式。比如我们有一个摄像头,在联网的情况下,同一个局域网下的app想发现这个摄像机,并和摄像机建立联系。这样一个需求,需要摄像头调用mDNS_Register,通过传参告知mdns库,在指定的port上注册一个did._ipcxx._tcp....https://blog.csdn.net/bingyu880101/article/details/81563319 至于ARM交叉编译时,前提是你已有ARM平台交叉编译工具链(可能有点废话了),需要修改的部分就是我们的mDNSResponder-878.70.2(根据下载的源码版本)下的mDNSPosix下的Makefile,要做的修改如下(删除两个CFLAGS_OS、指定CC、指定STRIP):
ARM上的部署(实际上是参考该Makefile的install指令):
①将mDNSPosix/build/prod的可执行文件“mdnsd”拷贝到嵌入式ARM平台板卡的“/usr/sbin”目录下;
②将mDNSPosix/build/prod下的libdns_sd.so、libnss_mdns-0.2.so直接拷贝到“/usr/lib/”目录下;
③将Clients/build下的dns-sd拷贝到合适目录;
ARM上的使用(通过dns-sd可执行文件):
①首先将mdnsd作为daemon启动(可通过ln -s添加到init.d下自动启动);
②在应用需要时,参数启动dns-sd,如“./dns-sd -R hxx _lvds local 8888 172.100.19.251”,如下图所示(win上发现arm上的mdns服务)
3.额外的(Avahi)
linux上专门的mDNS库(不支持windows),可以参考(实际上博主在ARM上采用该种实现,win上采用bonjour实现,两者是兼容的,上述对bonjour在arm上的编译及部署只是一些尝试):
http://www.avahi.org/http://www.avahi.org/ Avahi相比于Bonjour的实现,维基百科上这么说:
=======================================
Avahi vs. Bonjour[edit]
The Avahi project started in 2004 because Apple's Zeroconf implementation, Bonjour, used the GPL-incompatible Apple Public Source License. In 2006 Apple relicensed parts of Bonjour under the Apache License.[2]
Avahi's performance resembles that of Bonjour, sometimes exceeding it; however Avahi can lose services when managing large numbers of requests simultaneously.[3]
========================================
Avahi 项目始于 2004 年,因为Apple的 Zeroconf 实现Bonjour使用了与 GPL 不兼容的Apple Public Source License。2006 年,Apple在Apache 许可下重新许可了 Bonjour 的部分内容。[2]
Avahi的表现类似于卓悦,有时甚至超过它;然而,当同时管理大量请求时,Avahi 可能会丢失服务。[3]