【发布时间】:2021-12-09 12:57:19
【问题描述】:
您好,我可以使用this solution 获取本地网络 IP 地址。我尝试使用此解决方案通过 this Objective-C solution 获取广播 IP 地址。
static func getBroadCastAddress() -> 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 }
guard let interface = ptr?.pointee else { return "" }
let addrFamily = interface.ifa_addr.pointee.sa_family
if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {
let name: String = String(cString: (interface.ifa_name))
if name == "en0" || name == "en2" || name == "en3" || name == "en4" || name == "pdp_ip0" || name == "pdp_ip1" || name == "pdp_ip2" || name == "pdp_ip3" {
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)
// inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)
if let sinAddress = (interface.ifa_dstaddr as? sockaddr_in)?.sin_addr{ //=> It's always fail
address = String(utf8String: inet_ntoa(sinAddress))
}
}
}
}
freeifaddrs(ifaddr)
}
return address ?? ""
}
问题是我不能像目标 c 代码中的 inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr) 那样从 interface 得到 sin_addr。
谁能帮助我使用 Swift 在 Cocoa 中获取广播 IP 地址?感谢您的宝贵时间。
【问题讨论】:
-
对于您提供的代码示例,什么不起作用?如果您使用调试器单步调试,示例会在哪里遇到问题?
-
@ScottThompson 已更新。谢谢你的提及。