SwiftでLAN内のBonjourやAvahiに対応したデバイスを検索し、そのIPアドレスを求めたいと思います
NetServiceBrowserを利用すれば実現しそうな気がするのですが、いかんせん、能力が低いもので、よくわかりません
わかりやすい説明やサンプルコードが書かれたサイトがあれば教えてください
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
NetServiceBrowserにdelegateをセットして、searchForServicesを実行することでサービスを検索することが出来ます。
NetServiceBrowserで検索が成功するとデリゲートのnetServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool)
が呼ばれ、そこでサービスにdelegateをセットしてresolve
を実行します。
resolve
が成功すると今度はデリゲートの'netServiceDidResolveAddress(_ sender: NetService)'が呼ばれます。そのメソッドでaddresses
を利用することが出来ます。
下のコードをPlaygroundで実行すると、サービスのタイプに_afpovertcp._tcp
を指定しているのでAFPに対応した機器のIPアドレスが表示されます。
Swift
1import Foundation 2import PlaygroundSupport 3 4class Delegatee: NSObject, NetServiceBrowserDelegate, NetServiceDelegate { 5 var services = [NetService]() 6 7 func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool) { 8 services.append(service) 9 service.delegate = self 10 service.resolve(withTimeout: 5.0) 11 } 12 13 func netServiceDidResolveAddress(_ sender: NetService) { 14 var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST)) 15 guard let data = sender.addresses?.first else { return } 16 do { 17 try data.withUnsafeBytes { (pointer: UnsafePointer<sockaddr>) in 18 guard getnameinfo(pointer, socklen_t(data.count), &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 19 else { throw NSError(domain: "error_domain", code: 0, userInfo: .none) } 20 21 let address = String(cString: hostname) 22 print(address) 23 } 24 } catch { 25 print(error) 26 } 27 } 28} 29 30let delegatee = Delegatee() 31let browser = NetServiceBrowser() 32browser.delegate = delegatee 33browser.searchForServices(ofType: "_afpovertcp._tcp", inDomain: "") 34 35PlaygroundPage.current.needsIndefiniteExecution = true
投稿2017/03/30 09:30
総合スコア84
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/30 23:31
2017/03/30 23:53
2017/03/31 02:33
2017/03/31 04:52
2017/03/31 06:25
2017/03/31 06:26
2017/03/31 12:34