2009-03-01 7 views
5

http://www.mono-project.com/Mono.Zeroconf에서 ZeroConf 샘플을 테스트하려고합니다.Mono.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 내 등록 서비스를 찾을 수 없습니다

내 서버 코드입니다.

감사합니다!

답변

1

그는 위의 Mono.Zeroconf 코드를 테스트하기 위해 mzclient를 사용하고 있습니다. Mono.Zeroconf의 전체적인 포인트는 다중 플랫폼, 다중 mDNS 공급자 지원 (Avahi 및 Bonjour)을 제공하는 것입니다.

EntryGroup DBus Avahi API에 문제가있는 것으로 보이며 Mono.Zeroconf에서 문제를 조사하고 있습니다. 여기에 해결책을 게시하고, 문제를 파악할 때 새로운 Mono.Zeroconf 릴리즈 (프로젝트의 관리자)를 발표 할 것입니다.

+2

저도 같은 문제가 해결. 그로부터 거의 2 년. 모든 업데이트? – Marek

6

또한 Mono.Zeroconf 프로젝트 페이지에 제공된 바이너리를 사용하고 Windows에서 사용하기 위해 소스에서 libs를 빌드하고 다른 클라이언트가 찾을 수있는 서비스를 게시 할 수 없었습니다. 나는 사이트의 예제 코드와 제공된 MZClient를 모두 시도했다.

조금 더 파고 나자 Mono.Zeroconf 라이브러리에 익숙한 프로젝트를 발견했습니다. Google 코드 (최신 버전 0.9.0 인 것 같습니다)의 Growl for Windows 프로젝트에 체크인 된 바이너리를 사용하여 샘플 코드와 MZClient를 사용하여 검색 가능한 서비스를 성공적으로 게시 할 수있었습니다.

따라서 명백한 해결 방법은 해당 프로젝트에서 바이너리 (Mono.Zeroconf 및 Mono.Zeroconf.Providers.Bonjour)를 가져 와서 프로젝트에서 제공하는 바이너리 대신 사용하는 것입니다.

+1

DLL 파일을 찾으려면 https://github.com/briandunnington/growl-for-windows/tree/master/Growl/Growl.Daemon/Third%20Party%20Assemblies – twig

+0

파일을 찾으십시오. 7 년 전 현재의 DLL? – ScottN

2

서비스를 게시 할 수 없었습니다. 나는 코드를 보면서 버그는 UPort 세터는 Service.cs에있다 :

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

그것은 밖으로 mono-project.com/Mono.Zeroconf에서 바이너리

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

이것은 오해의 소지가 있습니다. int 변환으로 변환하는 것은 오버플로 할 수 없습니다. – Marek

3

을해야한다 이 문제를 일으키는 코드가 여전히 포함되어 있습니다. 가장 최근 코드 (모든 수정 사항 포함)는 this link 이지만 코드를 직접 컴파일해야합니다. 다음 링크에서 소스를 업데이트 한 후 다시 컴파일

1
+1

링크 만 대답하면 스택 오버플로를 환영하지 않습니다. – hims056

+1

죄송하지만 링크 앞의 주석은 제가 말하고자하는 모든 것이 었습니다 .. –

+0

@ hims056 링크가 제공 한 소스에서 수정 프로그램이 컴파일 될 때, 그것은 확실합니다 ... – zezba9000