을 연 후 오래 걸립니다 내가 가지고있는 네트워크 서비스를 발견하기위한 다음 코드를NSNetServiceBrowser didRemoveService 스트림
이러한 두 가지 방법으로 호출 결과[netServiceBrowser setDelegate: self];
[netServiceBrowser searchForServicesOfType: serviceType inDomain: domain];
(서비스를 서비스를 찾아 제거) :
- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser
didFindService:(NSNetService*) netService ... {}
- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser
didRemoveService:(NSNetService*) netService ... {}
잘 작동합니다. 장치를 끄면 즉시이 수신 되 고 didRemoveService 호가 수신됩니다. I는 장치 (입력, 출력 또는 둘 다) 스트림을 열면
그러나 :
[netService getInputStream: &inputStream outputStream: &outputStream];
[inputStream setDelegate: self];
[outputStream setDelegate: self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
[inputStream open];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[outputStream open];
가 갑자기 I 장치를 해제하는 것이 감지 할 NSNetServiceBrowser에게 거의 분이 소요
(이것은 소요 분 의 경우에는RemoveService가 호출되었습니다.
내가 통신하고 있지 않은 (스트림을 여는) 기기는 여전히 전화를 걸고 했습니다. 제거 된 서비스는입니다.
업데이트 : 다음은 내 문제와 관련된 정보입니다.
나는 Wireshark를 가진 추적을 실행하고이 다음 나타났습니다 :
내가 아이 패드 시뮬레이터 내 응용 프로그램을 시작, 응용 프로그램이 NSNetServiceBrowser를 시작하고 프린터를 감지합니다. 그런 다음 기기에 입력/출력 스트림 을 엽니 다 (airport express, usb를 통해). 프린터에서 상태 업데이트를 보내고 테스트 버튼을 누르면 프린터가 인쇄를 시작합니다. Wireshark에서는 프린터와의 모든 통신이 예상대로 이루어졌습니다.
이제 iPad에서 똑같은 응용 프로그램을 시작할 때 (그리고 iPad 시뮬레이터가 실행 중일 때). 응용 프로그램은 NSNetServiceBrowser도 시작하고 프린터를 감지합니다. 프린터가 상태 업데이트를 보내지 않으며 테스트 버튼을 누르면 프린터가 인쇄되지 않습니다. Wireshark에서 저는 의사 소통을 봅니다. 프린터 또는 공항에서 내 명령을 받고 ACK 패키지를 보냅니다.
iPad 시뮬레이터 앱을 종료하자마자 프린터가 iPad를 사용하여 보낸 명령 을 인쇄하기 시작합니다. 소켓을 열면 모든 bonjour 이벤트가 차단되는 것 같습니다. 어떻게 이런 일이 일어나지 않도록 할 수 있습니까? 여기
더 : https://devforums.apple.com/message/541436
스트림을 닫으면 didRemoveService가 실행됩니다. 그것은 어떤 종류의 타임 아웃을 기다리고있는 것 같습니다. – Zyphrax
이 경우인지 확실하지 않지만 - (void) stream : (NSStream *) aStream handleEvent : (NSStreamEvent) 이벤트 처리기를 살펴보십시오. Lion에서는 더 이상 NSStreamEventEndEncountered 이벤트에 대한 핸들러가 호출되지 않습니다. 따라서 모든 데이터를 받았으면 입력 스트림을 닫고 루프에서 제거해야합니다. 예를 들어, NSStreamEventHasBytesAvailable이 발생합니다. – Davyd
Apple 개발자 포럼에 액세스 할 수있는 사용자. 내 문제는 여기에 게시했습니다 : https://devforums.apple.com/message/541436. 불행히도 아직 해결책이 없습니다 : ( – Zyphrax