Swift 3, как разрешить NetService IP?
Просто попробуйте Bonjour в быстром 3
Вот мой код, я могу получить делегата
func netServiceDidResolveAddress(_ sender: NetService) {
print("netServiceDidResolveAddress service name \(sender.name) of type \(sender.type)," +
"port \(sender.port), addresses \(sender.addresses)")
}
И вот мой результат
netServiceDidResolveAddress имя службы Mac mini Уэббера типа _myapp._tcp., порт 5678, адреса Необязательно ([<<1002162e c0a80205 00000000 00000000>, <1c1e162e 00000000 fe800000 00000000 00bce7ad 24b4b7e8 08000000]]
c0a80205 - это IP-адрес, который я ищу => 192.168.2.5
И адрес - [Данные], Apple говорит
Адреса службы. Это NSArray экземпляров NSData, каждый из которых содержит одну структуру sockaddr, подходящую для использования с connect (2). Если для службы не разрешены адреса или служба еще не разрешена, возвращается пустой NSArray.
Я все еще не понимаю, почему Data не может использовать .btyes? Как Apple говорит: «Это NSArray экземпляров NSData», но я не могу использовать его как 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));
}
Любое предложение поможет, спасибо