我正试图在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找到我的注册服务。
谢谢!
答案 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)
从以下链接更新源代码后重新编译解决了问题
答案 4 :(得分:1)
他正在使用mzclient测试上面的Mono.Zeroconf代码。 Mono.Zeroconf的重点是提供跨平台,多个mDNS提供商支持(Avahi和Bonjour)。
EntryGroup DBus Avahi API似乎存在问题,我正在调查Mono.Zeroconf。我将在这里发布一个解决方案,并在我找出问题时制作一个新的Mono.Zeroconf版本(我是该项目的维护者)。