0.Part1:
mDNS实现之Bonjour与Avahi(一)——win/linux/arm交叉编译_平凡之路-CSDN博客官网:Bonjour - Apple Developerhttps://developer.apple.com/bonjour/1.WindowsBonjour SDK for Windowshttps://developer.apple.com/download/all/?q=Bonjour%20SDK%20for%20Windows下载上面官网sdk,安装(Bonjour服务启动,依赖于mDNSResponder.exe进程),C#在工程中添加COM组件即可使用。 ...https://blog.csdn.net/qq_23958061/article/details/122040336?spm=1001.2014.3001.5501
1.Bonjour
Bonjour - Apple Developer
● 源码(mDNSResponder-878.70.2):https://opensource.apple.com/tarballs/mDNSResponder/
● Bin&SDK:https://developer.apple.com/download/all/?q=Bonjour%20SDK%20for%20Windows
Bonjour -win | Bonjour -x86 | Bonjour -arm |
1.安装sdk,bonjour(mDNS_responder进程)服务启动 | 1.编译源码/mDNSPosix文件夹 | 1.使用交叉编译工具链,编译源码/mDNSPosix文件夹 |
2.C#调用COM组件-bonjour,或编译源码工程获得可执行文件 | 2.在mDNSPosix/build/prod/下获得x86下的可执行文件(file查看),启动mdnsd用于服务发现(daemon进程) libdns_sd.so libnss_mdns-0.2.so mDNSClientPosix mdnsd mDNSIdentify mDNSNetMonitor mDNSProxyResponderPosix mDNSResponderPosix | 2.同左,生成arm下的可执行文件(file查看) |
3.一般情况下client端仅需要browse(仅浏览已被sd发现的服务)而不需要去注册服务,代码参考源码中的DNSServiceBrowser.NET工程(browse验证: .net工程界面浏览或dns-sd -B浏览 client验证:dns-sd.exe -R my_pc _my_type_upper._udp local 8889 "i am pc") | 3.编译源码/Clients文件夹,在/Clients/build下获得x86可执行文件dns-sd (browse验证:./dns-sd -B _my_type._udp local client验证:./dns-sd -R my_pc _my_type._udp local 8889 "i am x86 board") | 3.同左,生成arm下的dns-sd |
*4.是否需要上位机创建client并注册服务,取决于业务逻辑,即目标服务端是否同样通过browse获取上位机要传递的信息(嵌入式设备通过串口、以太网等) | 4.client端实现browse代码参考mDNSPosix下的Client.c、ExampleClientApp.c、ExampleClientApp.h;而注册服务,可以在进程中调用dns-sd输入参数控制修改(可以减少代码以及熟悉接口成本),以接收上位机注册信息,并在处理后重新注册变更后的服务 | 4.同左 |
2.Avahi
● 作为了解的源码(nss-mdns):https://github.com/lathiat/nss-mdns
● 源码(avahi):https://github.com/lathiat/avahi
Avahi -x86 | Avahi -arm |
1.安装sdk(apt install avahi-加两次tab,如下——但不包含client实现: hxx@ubuntu:~$ apt install avahi- avahi-autoipd avahi-daemon avahi-discover avahi-dnsconfd avahi-ui-utils avahi-utils),或对源码进行编译获得 | 1.—— |
2.avahi-0.7源码工程中没有直接提供Makefile文件 ●首先需要参考: Makefile.am和makefile.in生成Makefile_Bendawang's Blog-CSDN博客_makefile.am文件生成makefile 生成Makefile ●示例(disable掉不用的或者当前环境缺少的,如qt3等): ./configure --disable-qt3 --disable-qt4 --disable-gtk3 --disable-gdbm --disable-python --disable-pygobject --disable-mono | 2.生成arm版Makefile(生成在build-arm下): ./configure --disable-qt3 --disable-qt4 --disable-gtk3 --disable-gdbm --disable-python --disable-pygobject --disable-mono --prefix=$(pwd)/bulid-am --host=arm --with-distro=none |
3.make install,头文件被安装到/usr/local/include/, 库被默认安装到/usr/local/lib/下(编译client需要用到): libavahi-client.a libavahi-client.la libavahi-client.so -> libavahi-client.so.3.2.9 libavahi-client.so.3 -> libavahi-client.so.3.2.9 libavahi-client.so.3.2.9 libavahi-common.a libavahi-common.la libavahi-common.so -> libavahi-common.so.3.5.3 libavahi-common.so.3 -> libavahi-common.so.3.5.3 libavahi-common.so.3.5.3 libavahi-core.a libavahi-core.la libavahi-core.so -> libavahi-core.so.7.0.2 libavahi-core.so.7 -> libavahi-core.so.7.0.2 libavahi-core.so.7.0.2 libavahi-glib.a libavahi-glib.la libavahi-glib.so -> libavahi-glib.so.1.0.2 libavahi-glib.so.1 -> libavahi-glib.so.1.0.2 libavahi-glib.so.1.0.2 libavahi-gobject.a libavahi-gobject.la libavahi-gobject.so -> libavahi-gobject.so.0.0.5 libavahi-gobject.so.0 -> libavahi-gobject.so.0.0.5 libavahi-gobject.so.0.0.5 libavahi-ui.a libavahi-ui.la libavahi-ui.so -> libavahi-ui.so.0.1.4 libavahi-ui.so.0 -> libavahi-ui.so.0.1.4 libavahi-ui.so.0.1.4 | 3.实际的交叉编译过程中可能存在交叉编译工具链sdk中缺少.so缺少的情况,可能需要提供工具链的同事协助进行更新 |
4.client验证: ●将client-browse-services.c中需要browse的协议类型进行修改,如:_my_type._udp ●编译client: gcc -o main_x86 client-browse-services.c /usr/local/include/avahi-client/*.h /usr/local/lib/*.so ●运行./main_x86,示例: hxx@ubuntu:~/0_git_dev/common/avahi-client-hxx/x86_build$ ./main_86 (Browser) NEW: service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local' (Browser) CACHE_EXHAUSTED (Browser) ALL_FOR_NOW Service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local': HXX-PC.local:8889 (192.168.109.1) TXT="i am pc" cookie is 0 is_local: 0 our_own: 0 wide_area: 0 multicast: 1 cached: 1 | 4.client的demo尝试: ●source到交叉编译工具链环境变量文件 ●使用环境变量中$CC对应编译器对demo进行编译: $CC -o mdns_browser_arm client-browse-services.c -lavahi-client -lavahi-common -lavahi-core -lavahi-glib -lavahi-gobject ●拷贝到arm板卡中运行(前提是avahi-daemon进程运行中,同时也代表运行环境ok) root@eh9301_7ev1156:~# ./mdns_browser_arm (Browser) NEW: service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local' (Browser) CACHE_EXHAUSTED (Browser) ALL_FOR_NOW Service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local': HXX-PC.local:8889 (172.100.19.134) TXT="i am pc222" cookie is 0 is_local: 0 our_own: 0 wide_area: 0 multicast: 1 cached: 1 |