我的代码我正在尝试使用SCNetworkSetGetServiceOrder来获取网络服务订单。如下所示
Ethernet
FireWire
Wi-Fi
Bluetooth PAN
Thunderbolt Bridge
我正在使用以下代码
-(void)getserviceorder
{
CFArrayRef interfaces;
CFIndex interfaceCount;
CFIndex interfaceIndex;
CFMutableArrayRef result;
CFArrayRef *portArray;
portArray = NULL;
result = NULL;
interfaces = NULL;
if (SCNetworkInterfaceCopyAll != NULL) {
interfaces = SCNetworkInterfaceCopyAll();
interfaceCount = CFArrayGetCount(interfaces);
for (interfaceIndex = 0; interfaceIndex < interfaceCount;
interfaceIndex++) {
SCNetworkInterfaceRef thisInterface;
SCNetworkSetRef set = CFArrayGetValueAtIndex(interfaces,interfaceIndex);
assert(thisInterface != NULL);
NSLog(@"SCNetworkSetGetServiceOrder is %@",SCNetworkSetGetServiceOrder(set));
}
CFRelease(interfaces);
}
但它总是返回null。这是正确的方法,或者我如何使用SCNetworkSetGetServiceOrder方法获取服务订单。 (SCNetworkSetRef set)
的值应该是SCNetworkSetGetServiceOrder
方法的参数。我在哪里可以了解更多关于此的信息
答案 0 :(得分:1)
例如,像这样(在Swift中):
import SystemConfiguration
let scpref = SCPreferencesCreate(kCFAllocatorDefault, "iflist" as CFString, nil)
let netset = SCNetworkSetCopyCurrent(scpref!)
let netservs = SCNetworkSetGetServiceOrder(netset!)! as NSArray
for id in netservs {
print("id \(id)")
let serv = SCNetworkServiceCopy(scpref!, id as! CFString)!
if SCNetworkServiceGetEnabled(serv) {
if let interface = SCNetworkServiceGetInterface(serv) {
let serviceName = SCNetworkServiceGetName(serv)
print(serviceName as! String)
}
}
}