这个项目使用 zeroconf Python 库来浏览和监控本地网络中的服务。它能够发现网络上的新服务,追踪服务的更新以及当服务不再可用时接收通知。

特性

  • 服务发现:自动检测网络上的新服务。
  • 服务更新:监控服务的变更和更新。
  • 服务移除:捕捉并记录服务移除事件。

安装依赖

使用 pip 安装所需的 zeroconf 库:

pip install zeroconf

完整代码

from zeroconf import ServiceBrowser, Zeroconf

class MyListener:
    # 当服务被移除时调用
    def remove_service(self, zeroconf, type, name):
        print(f"Service {name} removed")

    # 当服务更新时调用
    def update_service(self, zeroconf, type, name):
        info = zeroconf.get_service_info(type, name)
        print(f"Service {name} updated, service info: {info}")

    # 当添加新服务时调用
    def add_service(self, zeroconf, type, name):
        if type == "_services._dns-sd._udp.local.":
            # 如果是服务类型,为这个类型创建一个新的浏览器
            new_browser = ServiceBrowser(zeroconf, name, listener)
        else:
            # 如果是服务实例,获取服务信息
            info = zeroconf.get_service_info(type, name)
            print(f"Service {name} added, service info: {info}")

# 初始化Zeroconf对象
zeroconf = Zeroconf()
# 创建监听器实例
listener = MyListener()
# 开始浏览所有服务类型
browser = ServiceBrowser(zeroconf, "_services._dns-sd._udp.local.", listener)

try:
    input("Press enter to exit...\n\n")
finally:
    # 确保最后关闭Zeroconf以释放资源
    zeroconf.close()

代码说明

  • MyListener 类:用于处理 zeroconf 事件的监听器。
  • add_service 方法:当检测到新服务时调用。
  • update_service 方法:当现有服务更新时调用。
  • remove_service 方法:当服务被移除时调用。
  • ZeroconfServiceBrowser:用于初始化和开始服务浏览。