ubuntu使用mdns进行设备间通信的方法

   2024-09-30 5420
核心提示:mDNS(多播DNS)是一种用于在本地网络上发现其他设备和服务的协议安装必要的软件包:在Ubuntu上,你需要安装avahi-daemon和libns

mDNS(多播DNS)是一种用于在本地网络上发现其他设备和服务的协议

安装必要的软件包:

在Ubuntu上,你需要安装avahi-daemonlibnss-mdns这两个软件包。打开终端并运行以下命令来安装它们:

sudo apt-get updatesudo apt-get install avahi-daemon libnss-mdns
配置mDNS:

编辑/etc/nsswitch.conf文件,将hosts行修改为包含mdns4_minimal

sudo nano /etc/nsswitch.conf

将以下内容添加到hosts行:

hosts: files mdns4_minimal [NOTFOUND=return] dns

保存并退出。

重启avahi-daemon服务:
sudo systemctl restart avahi-daemon
注册服务:

你可以使用avahi-publish命令注册一个服务。例如,如果你想在本地网络上注册一个名为myservice的服务,可以运行以下命令:

avahi-publish -s "My Service" _myservice._tcp 12345

这将在本地网络上注册一个名为My Service的服务,使用TCP协议,端口号为12345。

发现服务:

要在本地网络上发现服务,可以使用avahi-browse命令。例如,要查找所有可用的_tcp服务,可以运行以下命令:

avahi-browse -at _services._dns-sd._udp

这将显示本地网络上所有可用的服务。

使用Python编写mDNS客户端和服务器:

你还可以使用Python的zeroconf库编写mDNS客户端和服务器。首先,安装zeroconf库:

pip install zeroconf

然后,你可以参考以下示例代码来实现mDNS客户端和服务器:

mDNS服务器示例代码:
from zeroconf import ServiceInfo, Zeroconfdesc = {'version': '0.1'}info = ServiceInfo("_myservice._tcp.local.", "My Service._myservice._tcp.local.", socket.inet_aton("127.0.0.1"), 12345, 0, 0, desc)zeroconf = Zeroconf()zeroconf.register_service(info)try:    while True:        time.sleep(0.1)except KeyboardInterrupt:    passfinally:    zeroconf.unregister_service(info)    zeroconf.close()
mDNS客户端示例代码:
from zeroconf import ServiceBrowser, Zeroconfclass MyListener:    def remove_service(self, zeroconf, type, name):        print("Service %s removed" % (name,))    def add_service(self, zeroconf, type, name):        info = zeroconf.get_service_info(type, name)        print("Service %s added, service info: %s" % (name, info))zeroconf = Zeroconf()listener = MyListener()browser = ServiceBrowser(zeroconf, "_myservice._tcp.local.", listener)try:    while True:        time.sleep(0.1)except KeyboardInterrupt:    passfinally:    zeroconf.close()

这样,你就可以在Ubuntu上使用mDNS进行设备间通信了。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号