로컬 네트워크에서 피어를 검색하고 연결할 수있는 응용 프로그램을 만들고 싶습니다. 따라서 bonjour 프레임 워크를 사용하여 신속하게 구현하기로했습니다.Swift 응용 프로그램에서 NSNetService 및 NSNetServiceBrowser 사용
그러나 Bonjour는 Swift를 사용하여 작업 할 수 없으며 그 이유를 알 수 없습니다. 다음은이 서비스를 테스트하는 데 사용하는 코드입니다.
import Foundation
let BM_DOMAIN = "local"
let BM_TYPE = "_helloworld._tcp."
let BM_NAME = "hello"
let BM_PORT : CInt = 6543
/// Netservice
let nsns = NSNetService(domain: BM_DOMAIN,
type: BM_TYPE, name: BM_NAME, port: BM_PORT)
let nsnsdel = BMNSDelegate() //see bellow
nsns.delegate = nsnsdel
nsns.publish()
/// Net service browser.
let nsb = NSNetServiceBrowser()
let nsbdel = BMBrowserDelegate() //see bellow
nsb.delegate = nsbdel
nsb.searchForServicesOfType(BM_TYPE, inDomain: BM_DOMAIN)
println("press enter")
// this prevents the app from quitting instantly.
NSFileHandle.fileHandleWithStandardInput().availableData
위임자는 콘솔에 대한 모든 호출을 단순히 인쇄하는 코드입니다. 내가 Bonjour browser를 사용하는 경우
netServiceWillPublish:sender
netServiceBrowserWillSearch
press enter
, 나는 서비스가 올바르게 게시 된 것을 볼 수 있습니다 여기에
class BMNSDelegate : NSObject, NSNetServiceDelegate {
func netServiceWillPublish(sender: NSNetService!) {
println("netServiceWillPublish:sender");
}
// .....and so on for the 8 other methods.....
}
class BMBrowserDelegate : NSObject, NSNetServiceBrowserDelegate {
func netServiceBrowserWillSearch(aNetServiceBrowser: NSNetServiceBrowser!){
println("netServiceBrowserWillSearch")
}
// .....and so on for the 6 other methods.....
}
이 샘플 코드의 출력됩니다. 그러나 두 대표의 콜백이 강렬한 디버깅 (와 유래에 읽기) 후
:-(**WillPublish
사람 옆에 호출되지 않습니다, 나는 그것이 작동하지 않는 이유를 알아낼 수 없습니다. 어떤 아이디어?
을 (나는 맥 OS X 10.9.3를 사용하고, 그리고 엑스 코드 6.0 베타
에서 좋아 난 그냥이 테스트 한 당신은 맞다. – jib
runloop을 실행하는 더 좋은 방법이 있습니까? 이 구현은 publish()를 수행하는 동안 다른 모든 것을 차단하는 것처럼 보입니다. – Dan
예. Swift가 1.0으로 등장한 이후로이 모습을보고 싶습니다. –