首页 > 解决方案 > 从 iPhone 获取本地 IP 地址,有时它不起作用,为什么?

问题描述

我想获取 iPhone 的本地 IP 地址,有时它可以工作并显示此地址:

http://192.168.8.152/home.htm

但有时它不起作用并显示此地址:

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
        }
    }

标签: iosswiftiphonenetwork-programming

解决方案


推荐阅读