ios - 从 iPhone 获取本地 IP 地址,有时它不起作用,为什么?
问题描述
我想获取 iPhone 的本地 IP 地址,有时它可以工作并显示此地址:
但有时它不起作用并显示此地址:
http://fd4c:d1a1:ee79:6400:f5dd:b93:12b7:2d42/home.htm
怎么了?如何解决?
这是斯威夫特代码:
func getIpAddress() -> String! {
var address: String?
var ifaddr: UnsafeMutablePointer<ifaddrs>? = nil
if getifaddrs(&ifaddr) == 0 {
var ptr = ifaddr
while ptr != nil {
defer { ptr = ptr?.pointee.ifa_next }
let interface = ptr?.pointee
let addrFamily = interface?.ifa_addr.pointee.sa_family
if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
if let name: String = String(cString: (interface?.ifa_name)!), name == "en0" {
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
getnameinfo(
interface?.ifa_addr,
socklen_t((interface?.ifa_addr.pointee.sa_len)!),
&hostname,
socklen_t(hostname.count),
nil,
socklen_t(0),
NI_NUMERICHOST
)
address = String(cString: hostname)
}
}
}
freeifaddrs(ifaddr)
}
return address as? String ?? ""
}
@IBOutlet weak var lblUrl: UILabel! {
didSet {
sAddr = getIpAddress()
var sLabel : String! = "http://"
sLabel += sAddr
sLabel += "/home.htm"
lblUrl.text = sLabel
}
}
解决方案
推荐阅读
- excel-formula - Vlookup返回一个公式?
- django - Django过滤器检查给定日期之间是否有任何其他预订
- python - 查找固定大小的所有唯一组合以达到给定的平均范围
- zurb-foundation - Zurb Foundation 6 显示无法触发事件,然后是关闭事件
- java - Android 切换按钮单击设置文本视图
- kotlin - Kotlin 可空任意
- java - 在 6.0 以上的 Android 版本中无法通过广播接收器获得通知
- python - Keras - 检查目标时出错:预期的 dense_2 有 2 个维度,但得到了形状为 (256, 1, 5) 的数组
- hibernate - Hibernate 和 Oracle 12c:未知的 Oracle 主要版本 [12]:无法确定要使用的方言 [name=Oracle,majorVersion=12]
- bash - 自变量以来经过的时间