首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建要由avahi播放的节目

创建要由avahi播放的节目
EN

Stack Overflow用户
提问于 2009-10-07 22:52:12
回答 2查看 3.9K关注 0票数 6

我正在尝试编写一个程序来输出数据,这些数据可以通过avahi在网络上提供。我看过的文档似乎说我必须将服务注册到dbus,然后将其连接到avahi,但这样做的文档非常少。有没有人知道好的文档?我一直在看这些:

python-dbus:http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html#exporting-objects

python-avahi:http://www.amk.ca/diary/2007/04/rough_notes_python_and_dbus.html

我对avahi是如何工作的真的很不熟悉,所以任何指点都会很有帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-13 17:04:37

Avahi“只是”ZeroConfig的一个客户端实现,它基本上是一个“基于多播的域名系统”协议。您可以使用Avahi通过端点发布“数据”的可用性。实际数据必须通过一些其他方法检索,但您通常会注册一个端点,该端点可以通过您喜欢的方法“调用”。

票数 1
EN

Stack Overflow用户

发布于 2013-08-07 21:37:47

考虑到你的问题是四年前提出的,我意识到这个答案太晚了。然而,它可能会对其他人有所帮助。

下面的代码使用avahi/dbus声明一个服务:

代码语言:javascript
复制
import avahi
import dbus
from time import sleep


class ServiceAnnouncer:
    def __init__(self, name, service, port, txt):
        bus = dbus.SystemBus()
        server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
        group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()),
                               avahi.DBUS_INTERFACE_ENTRY_GROUP)

        self._service_name = name
        index = 1
        while True:
            try:
                group.AddService(avahi.IF_UNSPEC, avahi.PROTO_INET, 0, self._service_name, service, '', '', port, avahi.string_array_to_txt_array(txt))
            except dbus.DBusException: # name collision -> rename
                index += 1
                self._service_name = '%s #%s' % (name, str(index))
            else:
                break

        group.Commit()

    def get_service_name(self):
        return self._service_name


if __name__ == '__main__':
    announcer = ServiceAnnouncer('Test Service', '_test._tcp', 12345, ['foo=bar', '42=true'])
    print announcer.get_service_name()

    sleep(42)

使用avahi-browse验证它是否已发布:

代码语言:javascript
复制
micke@els-mifr-03:~$ avahi-browse -a -v -t -r 
Server version: avahi 0.6.30; Host name: els-mifr-03.local
E Ifce Prot Name                                          Type                 Domain
+   eth0 IPv4 Test Service                                  _test._tcp           local
=   eth0 IPv4 Test Service                                  _test._tcp           local
   hostname = [els-mifr-03.local]
   address = [10.9.0.153]
   port = [12345]
   txt = ["42=true" "foo=bar"]
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1534655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档