2013-07-25 3 views
0

MAC의 Xamarin Studio에서 Xamarin을 사용하여 iOS 응용 프로그램을 작성하고 있습니다. 오픈 소스 uPNP 구현을 사용하고 있습니다. 그것들은 NetworkInterface.GetAllNetworkInterfaces()을 사용합니다.NetworkInterface.GetAllNetworkInterfaces()는 Xamarin.iOS에서 OperationalStatus가 'Unknown'인 인터페이스를 반환합니다.

내 문제는 반환 된 각 인터페이스가 OperationalStatus 속성이 '알 수 없음'으로 설정되어 있다는 것입니다.

Windows의 경우 모두 위 또는 아래로 설정됩니다. 그러나 Xamarin을 사용하고 iOS 기기에서이 코드를 실행하면 모든 인터페이스에 OperationalStatus이 '알 ​​수 없음'으로 표시됩니다.

이렇게하면 적어도 하나가 '가동'상태 일 것으로 예상되기 때문에 모든 결과가 삭제됩니다. 그렇다면이 인터페이스에서 정확한 OperationStatus을 얻기 위해 필요한 방법이나 무언가가 있습니까?

크로스 플랫폼 개발을 시도하고 있으며 가능하다면 uPNP 코드를 특별하게 사용하고 싶지 않습니다.

도움 주셔서 감사합니다.

답변

1

당 자 마린 지원 :

내가 나쁜 소식을 가지고있는 것처럼 보이는 : http://forums.xamarin.com/discussion/1706/system-net-networkinformation-getallnetworkinterfaces-fails 이 해결되지 않은 알려진 버그입니다. 체크 아웃 부분 3 부분 - 당신이 컴파일러 지침의 #if/#endif 다음 Building Cross Platform Applications를 사용하여 볼 수 있습니다, 장치 특정 코드의 이런 종류의
http://docs.xamarin.com/recipes/ios/network/reachability/detect_if_network_is_available : 당신은 네트워크 인터페이스 아이폰 OS를 찾을 기본 통화를해야합니다 5 실용적인 설정. 프로젝트 구성 방법에 대해서는 샘플 앱을 확인할 수도 있습니다.

그래서 여기 내가하고 결국 무엇을 :

NetworkInterface.OperationalStatus를 설정하지 않는 자 마린의 구현, 나도 '위로'또는 '알 수없는'수용 할 수 있도록 강제하고 있기 때문에
try 
    { 
     NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces(); 

     foreach (var netInterface in interfaces) 
     { 
      if ((netInterface.OperationalStatus == OperationalStatus.Up || 
       netInterface.OperationalStatus == OperationalStatus.Unknown) && 
       (netInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 || 
      netInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet)) 
      { 
       foreach (var addrInfo in netInterface.GetIPProperties().UnicastAddresses) 
       { 
        if (addrInfo.Address.AddressFamily == AddressFamily.InterNetwork) 
        { 
         var ipAddress = addrInfo.Address; 
         CurrentAddressTable.Add(ipAddress); 
        } 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Helper.Debug(ex.ToString()); 
    } 

. 이 접근 방식은 Windows 및 iOS에서 작동하지만 Android 기기에서는 작동하지 않습니다. 유효한 로컬 IP 주소를 얻는 것과 같은 간단한 작업은 매우 어려워야합니다. 그러나 이것이 이것이 현재의 상황임을 짐작할 수 있습니다.