繁体   English   中英

从 iPhone 获取本地 IP 地址,有时它不起作用,为什么?

[英]Getting the Local IP Address from iPhone, Sometimes it doesn't work, why?

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

http://192.168.8.152/home.htm

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

http://fd4c:d1a1:ee79:6400:f5dd:b93:12b7:2d42/home.htm

怎么了? 如何解决?

这是 Swift 代码:

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

在您的桥接 header 中添加#include ifaddrs.h。

这是获取 IP 地址所需的框架。

您也可以参考以下链接:

Swift - 获取设备的 WIFI IP 地址

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM