如何使用Mono.ZeroConf注册服务?

时间:2009-03-01 13:47:54

标签: c# mono zeroconf

我正试图在http://www.mono-project.com/Mono.Zeroconf测试ZeroConf示例。

我正在运行OpenSuse 11和Mono 2.2。

我的服务器代码是:

using System;
using Mono.Zeroconf;

namespace zeroconftestserver
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            RegisterService service = new RegisterService ();
            service.Name = "test server";
            service.RegType = "_daap._tcp";
            service.ReplyDomain = "local.";
            service.Port = 6060;

            // TxtRecords are optional
            TxtRecord txt_record = new TxtRecord ();
            txt_record.Add ("Password", "false");
            service.TxtRecord = txt_record;

            service.Register();
            Console.WriteLine("Service registered!");
            Console.ReadLine();
        }
    }
}

但我无法使用示例客户端浏览器代码或使用mzclient找到我的注册服务。

谢谢!

5 个答案:

答案 0 :(得分:7)

我还尝试使用Mono.Zeroconf项目页面提供的二进制文件,从源代码构建lib以便在Windows上使用,并且无法发布其他客户端可以找到的服务。我尝试了网站上的示例代码和提供的MZClient。

经过一番挖掘,我发现了一个用于Mono.Zeroconf库的项目。通过使用签入Google代码Growl for Windows项目的二进制文件(看起来是最新版本0.9.0),我能够成功发布包含示例代码和MZClient的可查找服务。

因此,明显的工作是从该项目中获取二进制文件(Mono.Zeroconf和Mono.Zeroconf.Providers.Bonjour)并使用它们而不是项目提供的那些。

答案 1 :(得分:3)

mono-project.com/Mono.Zeroconf上的二进制文件已过期,但仍包含导致此问题的代码。最新代码(包含所有修复程序)位于this link  但要求你自己编译代码。

答案 2 :(得分:2)

我也无法发布服务。我查看了代码,Service.cs中有一个错误,UPort setter:

this.port = (ushort) IPAddress.HostToNetworkOrder((int) value);  //overflow, port is always 0

应该是

this.port = (ushort) IPAddress.HostToNetworkOrder((short) value);

答案 3 :(得分:2)

从以下链接更新源代码后重新编译解决了问题

https://github.com/mono/Mono.Zeroconf/tree/master/src

答案 4 :(得分:1)

他正在使用mzclient测试上面的Mono.Zeroconf代码。 Mono.Zeroconf的重点是提供跨平台,多个mDNS提供商支持(Avahi和Bonjour)。

EntryGroup DBus Avahi API似乎存在问题,我正在调查Mono.Zeroconf。我将在这里发布一个解决方案,并在我找出问题时制作一个新的Mono.Zeroconf版本(我是该项目的维护者)。