2016-07-27 5 views
1

bekommen In meinem Code Ich versuche SCNetworkSetGetServiceOrder zu verwenden, um Netzwerk-Service-Reihenfolge zu erhalten. wie untenWie können wir Netzwerk-Service-Auftrag programmatisch in OSX-Projekt

Ethernet 
FireWire 
Wi-Fi 
Bluetooth PAN 
Thunderbolt Bridge 

i Code unten

bin mit
-(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); 
} 

Aber es gibt immer null. Ist das die richtige Methode oder wie kann ich die SCNetworkSetGetServiceOrder-Methode verwenden, um den Serviceauftrag abzurufen? Was sollte der Wert (SCNetworkSetRef set) sein, welcher der Parameter der SCNetworkSetGetServiceOrder Methode ist. Wo kann ich mehr über diese

Antwort

1

Zum Beispiel wie folgt aus (in 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) 
     } 
    } 
} 
+0

Sehr schön ... Jede Idee, über das Netz Neuordnen, wie WiFi erste später Ethernet und andere Netzwerkkarten? Versuchte mit 'SCNetworkSetSetServiceOrder (netset !, newSet)' aber ohne Glück –

Verwandte Themen