【发布时间】:2026-02-08 16:00:02
【问题描述】:
我可以在我的 Swift 项目中使用 Objective-C 代码从 NSNetService 获取 IP 地址。是否有 Swift 代码可以做同样的事情(以避免出现桥接头)?否则我会保持我现在的方式 - 但希望它可以在 Swift 中完成。
-(NSString* )IPAddressesFromData:(NSNetService *)service {
for (NSData *address in [service addresses]) {
struct sockaddr_in *socketAddress = (struct sockaddr_in *) [address bytes];
//NSLog(@"Service name: %@ , ip: %s , port %i", [service name], inet_ntoa(socketAddress->sin_addr), [service port]);
NSString *retString = [NSString stringWithFormat:@"%s", inet_ntoa(socketAddress->sin_addr)];
return retString;
}
return @"Unknown";
}
更新的代码有效:
func netServiceDidResolveAddress(sender: NSNetService) {
let theAddress = sender.addresses!.first! as NSData
var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
if getnameinfo(UnsafePointer(theAddress.bytes), socklen_t(theAddress.length),
&hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {
if let numAddress = String.fromCString(hostname) {
print("Resolved IP address: \(numAddress)")
}
}
}
【问题讨论】:
-
查看*.com/questions/25890533/…,了解如何从 sockaddr 结构中获取 IP 字符串。
-
沙赞!非常感谢 - 我将使用更新后的代码编辑我的原始问题。
标签: objective-c swift ip-address nsnetservice