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尝试:
●将内核工程师提供的libavahi-client.so、libavahi-common.so、libavahi-core.so、libavahi-glib.so、libavahi-gobject.so拷贝到工具链的lib目录下

●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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352787.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Android Says Bonjour

转载自: https://blog.csdn.net/innost/article/details/8629139 Android Says Bonjour 很高兴能在农历蛇年刚开始的这期《程序员》杂志上继续为读者奉上Android的故事。初来咋到,首先要向大家说声”你好“。有意思的是,Android也很通人情&a…

iOS 之 Bonjour 协议简单抓包分析

引子 因在学习iOS编程之bonjour编程的过程中,对bonjour产生了一些些的好奇,因此就查 阅了各种资料以及自己抓包分析该协议。 注:文章作为个人学习记录,不一定准确,如有错误请多多指教,共同进步!…

1.7 基于XML配置方式使用Spring MVC

一、基于XML配置与注解的方式使用Spring MVC 1、创建Maven项目 Maven项目 - SpringMvcDemo01 单击【Finish】按钮 2、添加相关依赖 在pom.xml文件里添加支持Spring MVC的相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmln…

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时&#xff0c;电感电压等于输入电压 开关断开时&#xff0c;电感电压输出电压-输入电压&#xff0c; 电感的感生电动势&#xff0c;N ΔΦ磁通的变化率&#xff0c;Δt时间 假设开关闭合与开关断开&#xff0c;开关断开时能量全部释放光 将第三个式…

【Python】深度理解Class类、Object类、Type元类的概念和关系

深度理解Class类、Object类、Type元类 1.Class类、Object类、Type元类的表面关系2.Class、Object、Type解释3.关系详解4.那么如何看待object、type在Python面对对象概念中的一席之地呢&#xff1f;5.那么object、type扮演了什么样的角色呢&#xff1f;他们对class又分别做了什么…

MongoDB(学习笔记1.0)

最近在学非关系型数据库MongoDB&#xff0c;猛地用起来的真的没关系型数据库方便啊。 首先还是数据库的安装&#xff1a; 安装直接去官网安装即可&#xff0c;官网地址&#xff1a;MongoDB: The Developer Data Platform | MongoDB 当前也有免安装版的&#xff0c;这里就不再…

京东数据分析软件工具(京东618销量查询)

这一期&#xff0c;我们主要分享今年618京东美妆的预售数据&#xff0c;包括面部护肤、香水彩妆、男士面部护肤品类。 -面部护肤- 今年618&#xff0c;面部护肤品类在京东累计预售量达到130万件&#xff0c;预售额达到13亿元。预售期间&#xff0c;护肤品类均价在1010元左右。期…

Android 使用第三方字体

先看下图 一.全局替换方式 1.新建assets引入资源 2. 自定义application&#xff0c;将第三方的字体&#xff0c;替换当前系统默认字体 class App : Application() {override fun onCreate() {super.onCreate()initTypeface()}private fun initTypeface() {val typefaceByson…

Android 字体大小(fontScale)不随系统设置变化

需求 App字体大小不变 如果用户将系统字体大小设置的非常大&#xff0c;可能导致APP的文字大小显示异常。 目标效果是&#xff0c;APP内字体大小不随系统设置的 字体大小 变化。 原始效果 系统的字体大小设置为 超大 时&#xff1a;&#xff08;字体大小 可变&#xff09; 目…

Android 自带的字体库、字体样式

1、设置字体 android:fontFamily“字体样式” 1、sans-serif-smallcaps &#xff08;左边只设置字体&#xff0c;右边设置加粗&#xff09; 2、sans-serif 3、cursive 4、sans-serif-black 5、sans-serif-condensed-light 6、sans-serif-thin 7、serif 8、serif-monospa…

android屏幕大小字体大小,Android字体大小自适应不同分辨率的解决办法

Android字体大小自适应不同分辨率的解决办法 今天有人问我&#xff0c;Android系统不同分辨率&#xff0c;不同大小的手机&#xff0c;字体大小怎么去适应呢&#xff1f;其实字体的适应和图片的适应是一个道理的。 一、原理如下&#xff1a; 假设需要适应320x240&#xff0c;48…

Android切换字体

有时候需要根据UI需求切换项目字体&#xff0c;步骤如下&#xff1a; 准备字体文件&#xff0c;示例使用ttf文件&#xff0c;新建font文件夹&#xff1a; 将ttf文件放到res/font目录下 设置全局字体&#xff0c;系统主题添加 <item name"android:fontFamily">f…

Android 字体颜色设置及颜色表

1、在android中经常看到设置的颜色为八位的十六进制的颜色值&#xff0c;例如&#xff1a; public static final class color { public static final int lightblue0x7f040000; } 或者在Java中tx.setTextColor(0xffff00f); 说明&#xff1a; 0xffff00ff是int类型的数据&#…

IOS字体与安卓字体渲染不一致

IOS字体与安卓字体渲染不一致 问题: 前端开发中经常会遇到各种各样的兼容问题,记录一次IOS字体与安卓字体渲染不一致,当字体包名字中包含’-Bold’时 错误代码如下: font-family: DINAlternate-Bold ; font-weight: bold;IOS: 不会渲染’font-weight: bold’只是加载了’…

android中文字体加粗,android TextView设置中文字体加粗实现方法

android TextView设置中文字体加粗实现方法 英文设置加粗可以在xml里面设置: 复制代码 代码如下: android:textStyle="bold" 英文还可以直接在String文件里面直接这样填写: 复制代码 代码如下: Plain, bold, italic, bold-italic b代码加粗,i代表倾斜 中文设置加粗就…

android常用字体代码,Android TextView设置字体风格多种组合

在开发应用过程中经常会遇到显示一些不同的字体风格的信息犹如默认的LockScreen上面的时间和充电信息。对于类似的情况,可能第一反应就是用不同的多个TextView来实现,对于每个TextView设置不同的字体风格以满足需求。 这里推荐的做法是使用Android.text.*;和android.text.sty…

Android 字体粗细的设置

转载:https://juejin.im/post/597d88f75188257fc2177c36 如何实现 “中间这几个字要加粗&#xff0c;但是不要太粗&#xff0c;比较纤细的那种粗” &#xff1f; 分享一个最近做业务遇到的简单又蛮有意思的的文本显示处理过程。具体就是有这么一段文字&#xff0c;类似“转盘…

Android字体引入

2个方案&#xff1a;①xml引入、②java代码引入。 效果图&#xff1a; 方法①&#xff1a;xml引入&#xff1a; 1.创建font目录&#xff1a; 2.把字体库复制到font目录下&#xff1a; 3.xml中&#xff0c;使用fontFamily引入字体库&#xff1a; <TextViewandroid:text"…

Android字体样式修改

效果图 准备字体 Download Alibaba Sans比如阿里巴巴普惠体&#xff0c;也可以其他网站找一些对应的资源。 字体使用 将字体文件放到res/font文件夹下&#xff0c;如果没有font文件&#xff0c;则新建一个。 添加到font路径下的字体文件&#xff0c;明明不能是汉字&#xff…

玩转安卓字体

起因 最近公司有个需求&#xff0c;需要做 Widget &#xff0c;内心其实是拒绝的&#xff0c;因为这个玩意儿特别难用&#xff0c;而且限制重重&#xff0c;但没办法&#xff0c;也不能不做&#xff0c;那就开始吧。 本来以为挺简单的东西&#xff0c;一个列表展示数据&#…