Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Zeroconf/Bonjour上发布的最简单方法?_Python_Bonjour_Zeroconf - Fatal编程技术网

Python 在Zeroconf/Bonjour上发布的最简单方法?

Python 在Zeroconf/Bonjour上发布的最简单方法?,python,bonjour,zeroconf,Python,Bonjour,Zeroconf,我有一些应用程序想让zeroconf可见 有没有一种简单的可编写脚本的方法 我的网络管理员是否需要执行任何操作才能启用此功能 Python或sh将是首选。欢迎为Linux和OS X提供特定于操作系统的建议。通过,非常简单。我推荐。或者您可以使用bash: dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...] dns sd-R[…] 默认情况下,这在OS X上工作。对于其他*NIX,请参

我有一些应用程序想让zeroconf可见

  • 有没有一种简单的可编写脚本的方法
  • 我的网络管理员是否需要执行任何操作才能启用此功能

  • Python或sh将是首选。欢迎为Linux和OS X提供特定于操作系统的建议。

    通过,非常简单。

    我推荐。

    或者您可以使用bash:

    dns-sd -R <Name> <Type> <Domain> <Port> [<TXT>...]
    
    dns sd-R[…]
    默认情况下,这在OS X上工作。对于其他*NIX,请参阅手册页(您可能需要通过首选的软件包管理器安装该手册页)。

    pybonjour似乎没有被积极维护。我正在使用

    下面是我用来向iOS设备宣布a的脚本的摘录:

    from zeroconf import ServiceInfo, Zeroconf
    
    class WebSocketManager(service.Service, object):
        ws_service_name = 'Verasonics WebSocket'
        wsPort = None
        wsInfo = None
    
        def __init__(self, factory, portCallback):
            factory.protocol = BroadcastServerProtocol
            self.factory = factory
            self.portCallback = portCallback
            self.zeroconf = Zeroconf()
    
        def privilegedStartService(self):
            self.wsPort = reactor.listenTCP(0, self.factory)
            port = self.wsPort.getHost().port
    
            fqdn = socket.gethostname()
            ip_addr = socket.gethostbyname(fqdn)
            hostname = fqdn.split('.')[0]
    
            wsDesc = {'service': 'Verasonics Frame', 'version': '1.0.0'}
            self.wsInfo = ServiceInfo('_verasonics-ws._tcp.local.',
                                      hostname + ' ' + self.ws_service_name + '._verasonics-ws._tcp.local.',
                                      socket.inet_aton(ip_addr), port, 0, 0,
                                      wsDesc, hostname + '.local.')
            self.zeroconf.register_service(self.wsInfo)
            self.portCallback(port)
    
            return super(WebSocketManager, self).privilegedStartService()
    
        def stopService(self):
            self.zeroconf.unregister_service(self.wsInfo)
    
            self.wsPort.stopListening()
            return super(WebSocketManager , self).stopService()
    

    听起来不错。现在请注意。不幸的是,我不知道。它只是avahi,在Linux和大多数BSD上运行。@bjoernz我已经更新了我的答案以反映linkrot。
    from zeroconf import ServiceInfo, Zeroconf
    
    class WebSocketManager(service.Service, object):
        ws_service_name = 'Verasonics WebSocket'
        wsPort = None
        wsInfo = None
    
        def __init__(self, factory, portCallback):
            factory.protocol = BroadcastServerProtocol
            self.factory = factory
            self.portCallback = portCallback
            self.zeroconf = Zeroconf()
    
        def privilegedStartService(self):
            self.wsPort = reactor.listenTCP(0, self.factory)
            port = self.wsPort.getHost().port
    
            fqdn = socket.gethostname()
            ip_addr = socket.gethostbyname(fqdn)
            hostname = fqdn.split('.')[0]
    
            wsDesc = {'service': 'Verasonics Frame', 'version': '1.0.0'}
            self.wsInfo = ServiceInfo('_verasonics-ws._tcp.local.',
                                      hostname + ' ' + self.ws_service_name + '._verasonics-ws._tcp.local.',
                                      socket.inet_aton(ip_addr), port, 0, 0,
                                      wsDesc, hostname + '.local.')
            self.zeroconf.register_service(self.wsInfo)
            self.portCallback(port)
    
            return super(WebSocketManager, self).privilegedStartService()
    
        def stopService(self):
            self.zeroconf.unregister_service(self.wsInfo)
    
            self.wsPort.stopListening()
            return super(WebSocketManager , self).stopService()