2016-07-27 1 views
1

私のコード私はSCNetworkSetGetServiceOrderを使ってネットワークサービスの注文を取得しようとしています。OSXプロジェクトでネットワークサービスの注文をプログラマチックに受けるにはどうすればいいですか

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メソッドを使用してサービスオーダーを取得する方法です。 SCNetworkSetGetServiceOrderメソッドのパラメータである(SCNetworkSetRef set)の値は何であるべきですか。ここで、iは、このような(スウィフトに)、例えばこの

答えて

1

について詳しく知ることができます。

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

非常に素晴らしい...最初のWiFiのように、後でイーサネットおよびその他のネットワークカードをネットワークセットを並べ替えるについての任意のアイデア? 'SCNetworkSetSetServiceOrder(netset!、newSet)'を使ってみましたが、運がない –

関連する問題