Zeroconf/Bonjour
2017-03-07 08:44
966 查看
Zeroconf苹果设备中也叫Bonjour是一种自发现协议,可以自动搜索发现同一局域网中的设备及服务。
使用前需要安装或者移植avahi-daemon,avahi-daemon安装运行后,就可以进行serveice的publish了,命令如下:
avahi-publish -s identifier type port name
identifier即标识符以后可以用来对终止服务或者重新发起,type需要以._tcp.local.结尾。port为绑定的端口号,最后一个name一般设为主机名也就是最后设备搜索到的名字
再起一个avahi-browse -t 就可以发现上面的发起的服务了,在苹果设备中不需要avahi-browse就可以直接发现了。
要是不要不想单独起一个avahi-daemon的话,可以直接python中的包实现
C++上的实现也与此相类似,也有很多的实现方式,我司一款airplay无线投屏所参考的是XBMC的https://github.com/xbmc/xbmc/blob/master/xbmc/network/Zeroconf.h
使用前需要安装或者移植avahi-daemon,avahi-daemon安装运行后,就可以进行serveice的publish了,命令如下:
avahi-publish -s identifier type port name
identifier即标识符以后可以用来对终止服务或者重新发起,type需要以._tcp.local.结尾。port为绑定的端口号,最后一个name一般设为主机名也就是最后设备搜索到的名字
再起一个avahi-browse -t 就可以发现上面的发起的服务了,在苹果设备中不需要avahi-browse就可以直接发现了。
要是不要不想单独起一个avahi-daemon的话,可以直接python中的包实现
from zeroconf import ServiceInfo, Zeroconf class ZeroconfTest(service.Service, object): service_name = 'Zeroconf Test' Port = None Info = None def __init__(self, factory, portCallback): factory.protocol = BroadcastServerProtocol self.factory = factory self.portCallback = portCallback self.zeroconf = Zeroconf() def StartService(self): self.Port = reactor.listenTCP(0, self.factory) port = self.Port.getHost().port fqdn = socket.gethostname() ip_addr = socket.gethostbyname(fqdn) hostname = fqdn.split('.')[0] wsDesc = {'service': 'myservice', 'version': '1.0.0'} self.Info = ServiceInfo('_myservice._tcp.local.', hostname + ' ' + self.service_name + '_myservice._tcp.local.', socket.inet_aton(ip_addr), port, 0, 0, wsDesc, hostname + '.local.') self.zeroconf.register_service(self.Info) self.portCallback(port) return super(ZeroconfTest, self).StartService() def stopService(self): self.zeroconf.unregister_service(self.Info) self.Port.stopListening() return super(ZeroconfTest , self).stopService()
C++上的实现也与此相类似,也有很多的实现方式,我司一款airplay无线投屏所参考的是XBMC的https://github.com/xbmc/xbmc/blob/master/xbmc/network/Zeroconf.h
相关文章推荐
- Bonjour/Zeroconf with Arduino
- zeroconf研究笔记(1) ——zeroconf初步认识
- zeroconf研究笔记(1) ——zeroconf初步认识
- zeroconf和avahi
- 关于linux /etc/sysconfig/network中的NOZEROCONF=yes参数
- UbuntuHelp:HowToZeroconf
- 找不到可用的无线网络Wireless Zero Conf
- dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解
- FD_set FD_zero
- Spark Streaming-1-Flume-conf总结-1-http_self_to_avro_spark streaming
- supervisord.conf
- tomcat通过tomcat 安装根目录下的conf-Catalina-localhost目录发布项目详解
- 升级到XCode6后,iOS8里设置tableview的setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
- 线上在用的zabbix_agentd.conf文件
- UASCO Zero Sum DFS + Stack
- Nginx配置文件nginx.conf中文详解
- 关于Ubuntu配置文件apache2 httpd.conf 位置
- Linux - 文件 /dev/null 和 /dev/zero
- Redis----redis.conf及配置
- 程序链接PostgreSQL 时报错"no pg_hba.conf entry"