- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
只是在 swift 3 中尝试 Bonjour
这是我的代码,我可以接收委托(delegate)
func netServiceDidResolveAddress(_ sender: NetService) {
print("netServiceDidResolveAddress service name \(sender.name) of type \(sender.type)," +
"port \(sender.port), addresses \(sender.addresses)")
}
这是我的结果
netServiceDidResolveAddress service name Webber's Mac mini of type _myapp._tcp.,port 5678, addresses Optional([<1002162e c0a80205 00000000 00000000>, <1c1e162e 00000000 fe800000 00000000 00bce7ad 24b4b7e8 08000000>])
c0a80205是我要找的IP => 192.168.2.5
地址是 [Data] ,Apple 说
The addresses of the service. This is an NSArray of NSData instances, each of which contains a single struct sockaddr suitable for use with connect(2). In the event that no addresses are resolved for the service or the service has not yet been resolved, an empty NSArray is returned.
我仍然很困惑为什么 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));
}
任何建议都会有帮助,谢谢
最佳答案
这是我在 Swift 3 中的做法。
func netServiceDidResolveAddress(_ sender: NetService) {
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
guard let data = sender.addresses?.first else { return }
data.withUnsafeBytes { (pointer:UnsafePointer<sockaddr>) -> Void in
guard getnameinfo(pointer, socklen_t(data.count), &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 else {
return
}
}
let ipAddress = String(cString:hostname)
print(ipAddress)
}
swift 5
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
data.withUnsafeBytes { (pointer: UnsafeRawBufferPointer) -> Void in
let sockaddrPtr = pointer.bindMemory(to: sockaddr.self)
guard let unsafePtr = sockaddrPtr.baseAddress else { return }
guard getnameinfo(unsafePtr, socklen_t(data.count), &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 else {
return
}
}
let ipAddress = String(cString:hostname)
print(ipAddress)
关于ios - Swift 3 如何解析 NetService IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38197198/
我正在尝试在 Swift 中本地发布 bonjour 服务进行简单测试。我通过一个简单的单 View 应用程序来执行此操作,该应用程序仅创建一个 netService 对象并尝试发布它。当我运行应用程
我希望做这样的事情: 在 netServiceBrowser:didFindService:moreComing: [self.foundServices addObject:aNetService]
我正在尝试使用这种方式获取所有本地打印机; let serviceBrowser = NetServiceBrowser() serviceBrowser.delegate = self servic
当我得到一个NetService对象时,我尝试做: NSNetService *ss=[netArray objectAtIndex:indexPath.row]; ss.delegate=self;
只是在 swift 3 中尝试 Bonjour 这是我的代码,我可以接收委托(delegate) func netServiceDidResolveAddress(_ sender: NetServi
我的应用程序在使用 mDNS 来宣传和发现服务方面非常成功。但是,我在查找文档时发现 Apple 已将其 Bonjour 类标记为已弃用:https://developer.apple.com/doc
我的应用程序在使用 mDNS 来宣传和发现服务方面非常成功。但是,我在查找文档时发现 Apple 已将其 Bonjour 类标记为已弃用:https://developer.apple.com/doc
我想在本地网络上的多个设备之间传输音频文件,一个充当服务器,另一个充当客户端,我发现 https://github.com/tonyd256/TDAudioStreamer此类将音频流式传输到连接的客
我正在使用 Apple's Bonjour 创建点对点聊天应用程序在 Swift 3 中。 发布 NetService 后,我想添加一个 user_id 和 name 参数作为 TXT 记录。我花了
我是一名优秀的程序员,十分优秀!