mDNS实现之Bonjour与Avahi(二)——win/linux/arm交叉编译
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 |
mDNS实现之Bonjour与Avahi(二)——win/linux/arm交叉编译相关推荐
- mDNS实现之Bonjour与Avahi(一)——win/linux/arm交叉编译
0.Part2:mDNS实现之Bonjour与Avahi(二)--win/linux/arm交叉编译_平凡之路-CSDN博客1.BonjourBonjour - Apple Developer● 源码 ...
- 商用及企业级服务器搭建之二:linux系统,linux命令
商用及企业级服务器搭建之二:linux系统,linux命令 linux系统 1. linux 一切皆文件,源码开放,具有多任务.多用户.多平台特性 2. 只有一个顶级目/,不分盘,文件名和命令区分大小 ...
- Linux学习系列二:Linux中的常用命令
这个系列的Linux教程主要参考刘遄老师的<Linux就该这么学>.用的系统是RHEL8,如果遇见一些命令出现问题,请首先检查自己的系统是否一致,如果不一致,可网上查一下系统间某些命令之间 ...
- 科优稳健可Ansys.OptiSLang.6.2.0.44487.Win.Linux.X64
科优稳健可Ansys.OptiSLang.6.2.0.44487.Win.Linux.X64 optiSLang可与多种CAE软件或者求解器集成,可基于其求解器进行各种工程仿真分析或者数据处理, ...
- 二丶Linux安装xdd-plus教程及必备依赖的安装+青龙对接xdd
二丶Linux安装xdd-plus教程及必备依赖的安装 没有服务器的先自行购买,这里推荐腾讯云2H4G8M首年70–点击购买 **首先需要安装青龙容器没装的青龙容器部署安装及常用命令 QQ交流群:10 ...
- 鸟哥的Linux私房菜(服务器)- 主机基本安全之二: Linux线上自动升級
主機基本安全之二: Linux 線上自動升級 切換解析度為 800x600 最近更新日期:2006/09/10 本文已不再維護,更新文章請參考這裡 在現在的 Internet 上面,Cracker 實 ...
- minio下载及安装:win linux平台
minio下载及安装:win linux平台 docker run -p 9000:9000 -v /mnt/data:/data minio/minio server /data minio.exe ...
- 乐鑫代理-启明云端分享ESP32系列教程之二:Linux搭建esp-idf环境
提示:此教程依据乐鑫官方的ESP32入门教程总结而来,仅供个人参考学学习,如有错误,欢迎批评指正.乐鑫官方参考: 乐鑫官方文档地址 1.搭建esp-idf环境 1.1安装虚拟机与Ubuntu 未安装请 ...
- Linux学习之CentOS(二)--初识linux的一些常用命令
Linux学习之CentOS(二)--初识linux的一些常用命令 在VM上安装完了CentOS6.4以后,看着linux系统成功跑起来,心里小激动了一把......但是前方学习的道路还很遥远... ...
最新文章
- mysql当前时间减1小时_最佳睡眠时间:晚上睡眠不超8小时,午睡不超1小时
- Attention Mechanism
- ubuntu dig timeout解决方法,dnscat执行失败也是这个原因
- 【职场攻略】是什么决定了我们的工资
- JavaScript实现省市联动
- 关于java的public,private,protect,以及默认权限的理解
- wxWidgets:wxDialog类用法
- python读文本文件的过程是怎样的_读写文本文件的步骤_Python读写txt文本文件的操作方法全解析...
- BGP小实验(一)——小实验练练手走起来
- php 取url根域名,php中取得URL的根域名的代码
- windbg 常用命令详解
- 【ES6(2015)】Promise
- 我的渣渣java实训
- [Hadoop]-Yarn-调度器篇
- 二维图像的离轴数字全息及显示
- Java文件上传【通用】
- 剑指offer T26 重排链表
- dell商务计算机主机闪烁黄灯,戴尔电脑开不了机 已经几天了 主机灯橙色 闪闪的...
- 【大数据】城市公交网络分析与可视化(二):获取公交行驶路径并绘制散点图
- 用Markdown画流程图
热门文章
- 【python】Django系列Day06--Django中间件介绍
- 数据结构与算法之二叉树广度遍历、深度遍历总结
- 巴西总统Telegram账号被入侵背后,攻击关键点竟是手机语音信箱
- 必应好壁纸(必应壁纸) 官方主页
- python2字符串编码方式_编码方式的区别以及文本在python2中的应用
- 【JAVA黑马程序员笔记】四 P314到P384(特殊流、多线程编程、网络编程模块、lambda表达式、接口组成更新、方法引用、函数式接口)
- 招联金融招聘实习生内推
- Go 安装第三方包 与 GoLand 导入第三方包
- Fluent动网格【2】:Profile文件
- 社科发布:十大调查研究咨询公司助力中国梦