2011-05-05 2 views
1

현재 iPad 응용 프로그램을 개발 중입니다. WCF를 사용하여 Windows C# 응용 프로그램과 통신하고 BonJour를 통해 검색해야합니다.MonoTouch.Foundation.NSNetService로 주소를 확인하는 방법은 무엇입니까?

Mono.ZeroConf 라이브러리를 사용하여 windows/C# 부분을 이미 만들고 Windows에서 작동하는 것으로 테스트했습니다.

이제 MonoTouch 응용 프로그램에서 Windows 응용 프로그램을 검색하려고하면 주소를 확인해야합니다. 나는 무엇이 잘못되었는지 간단히 알 수 없다.

iPad 앱에 다음 코드가 있습니다.

NSNetServiceBrowser browser = new NSNetServiceBrowser(); 
browser.FoundService += delegate(object sender, NSNetServiceEventArgs e){ 
    e.Service.AddressResolved += delegate(object service, EventArgs e1){ 

     //No matter how I treat the Bytes here it resolves to me as 8.135.207.208 
     //When it was supposed to resolve to some 172.x.x.x ip. 
     long address = ((NSNetService)service).Addresses[0].Bytes.ToInt64(); 
    }; 
    e.Service.Resolve(); 
}; 
browser.SearchForServices("_myService._tcp", "local"); 

내 질문은 올바른 주소록 배열의 NSData 개체를 어떻게 처리해야 할 것인가입니다.

검색을 시도했지만 알아낼 수 없습니다.

해결 된 서비스의 모든 다른 속성 등 이름, 포트,

나는 당신의 일부가 여기에 있었다 바라며, 나에게 답변을 제공 할 수처럼 정확합니다.

안부 /앤더스

답변

0

귀하가받는 주소의 데이터가있는 NSArray에있는 NSData입니다. 대리자 자체에 대한 설명은 sockaddr 객체 (일반 C 구조체)의 컬렉션이라고 설명합니다. 그래서 확실히 Int64는 아니지만 sockaddr 객체에 대한 포인터입니다.

MT에서 수행되는 방식은 조금 다릅니다. NSNetService에 대한 위임을 받았으므로 서비스가 주소를 확인하기를 기다려야합니다. 이는 다른 해결로 완료됩니다.

대개 NSNetServiceBrowser 대리자가 반환 한 NSNetService를 저장 한 다음 주소가 확인 될 때까지 대기합니다.이 작업이 완료되면 서비스가 이미 초기화되어 있으므로 주소 자체는 신경 쓰지 않습니다. .

+0

모두 똑바로하십시오. nsnetservice의 주소를 WCF 서비스에 대한 인수로 사용하고 싶습니다. 이를 위해 IP를 사용하고 싶지만 물론 NSNetService 객체의 DNS 이름으로 시도 할 수 있습니다. 나는 그것이 당신이 제안하는 것이라고 생각합니다. 또는 "주소가 이미 초기화되었으므로 서비스를 사용하고 주소 자체는 신경 쓰지 않습니다." – ankhansen

+0

AddressResolved 대리자가 호출되면 실제 NSService를 사용할 수 있습니다. HostName 및 Port 속성을 사용하여 NSUrlConnection 및 NSUrlRequest에 대한 NSUrl을 만듭니다. –

+0

좋아, 나는 그것이 일할 것으로 기대한다. 내 서비스가 응용 프로그램에서 호스팅되는 대신 웹 사이트로 이동 한 이후 실제로 다른 접근 방식을 취하고 Bonjour 검색을 중단했습니다. 그러나 어쨌든 당신의 도움에 감사드립니다. – ankhansen

관련 문제