首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自NSNetService的Swift IP地址

来自NSNetService的Swift IP地址
EN

Stack Overflow用户
提问于 2016-06-16 20:57:38
回答 1查看 1.3K关注 0票数 2

在我的Swift项目中,我可以使用Objective-C代码从NSNetService获取IP地址。有没有Swift代码可以做同样的事情(避免使用桥接头)?否则,我将保持现在的方式-但希望它可以在Swift中完成。

代码语言:javascript
复制
-(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";
}

更新了工作正常的代码:

代码语言:javascript
复制
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)")
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2017-08-04 13:29:31

您可以使用:

代码语言:javascript
复制
func netServiceDidResolveAddress(_ sender: NetService) {

    var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
    guard let data = sender.addresses?.first else { return }
    do {
        try data.withUnsafeBytes { (pointer:UnsafePointer<sockaddr>) -> Void in
            guard getnameinfo(pointer, socklen_t(data.count), &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 else {
                throw NSError(domain: "domain", code: 0, userInfo: ["error":"unable to get ip address"])
            }
        }
    } catch {
        print(error)
        return
    }
    let address = String(cString:hostname)
    print("\(sender.name)  IP:\(address)")

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37859952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档