Swift 3でBonjourを試してみました
これが私のコードです。デリゲートを受け取ることができます
func netServiceDidResolveAddress(_ sender: NetService) {
print("netServiceDidResolveAddress service name \(sender.name) of type \(sender.type)," +
"port \(sender.port), addresses \(sender.addresses)")
}
そして、これが私の結果です
netServiceDidResolveAddress サービス名 Webber の Mac mini タイプ _myapp._tcp.、ポート 5678、アドレス Optional([<1002162e c0a80205 00000000 00000000>, <1c1e162e 00000000 fe800000 00000000 000bce7ad 24b000>800]8)
c0a80205 は私が探している IP です => 192.168.2.5
そして、アドレスは [Data] です、とAppleは言います
サービスのアドレス。これは NSData インスタンスの NSArray であり、それぞれが connect(2) での使用に適した単一の struct sockaddr を含んでいます。サービスのアドレスが解決されていない場合、またはサービスがまだ解決されていない場合は、空の NSArray が返されます。
なぜ Data が .btyes を使用できないのか、まだ混乱していますか? Apple が言うように、「これは NSData インスタンスの NSArray です」しかし、私は NSData のようには使用できません
そして、アドレスを読み取り可能な IP 文字列として解決する方法は?
以前にこれを試しましたが、例外として結果が得られません...
let thedata = NSData(bytes: sender.addresses, length: (sender.addresses?.count)!)
var storage = sockaddr_storage()
thedata.getBytes(&storage, length: sizeof(sockaddr_storage))
if Int32(storage.ss_family) == AF_INET {
let addr4 = withUnsafePointer(&storage) {UnsafePointer<sockaddr_in>($0).pointee }
print(inet_ntoa(addr4.sin_addr));
}
どんな提案も役に立ちます、ありがとう