2012-08-01 4 views
2

나는 다음과 같은 방법이있다 : I는 일반적인 방법으로 인터넷에 연결되어있을 때3G 연결을 통해 인터넷 연결 상태를 확인하는 방법은 무엇입니까?

public static bool IsNetworkConnected() 
{ 
    ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile(); 
    IReadOnlyList<ConnectionProfile> connectionProfile = NetworkInformation.GetConnectionProfiles(); 
    if (InternetConnectionProfile == null) 
     return false; 
    else 
     return true; 
} 

그것은 잘 작동 - LAN 케이블 또는 Wi-Fi를 통해. 내 3G USB 모뎀을 사용할 때 거짓을 반환합니다 (InternectConnectionProfile이 null 임). 왜 그런가요? 어떻게 해결할 수 있습니까?

+1

나는 보통 현재 연결 상태를 무시하는 것이 좋습니다, 그리고 그냥 (백그라운드 스레드에서, 바람직하게는) 당신이 인터넷을 통해하고 싶은 것이 무엇이든 시도 할 것 - 다음 (시간 초과/재시도 횟수) 후에 작업을 수행 할 수없는 경우 사용자에게보고하십시오. 연결 상태는 대화 상대의 존재 여부를 확인하고 대화 상대를 사용하는 것과 대화의 중간 단계로 진행될 수 있습니다. 이러한 상황에 대처할 수있는 코드를 작성 했으므로 코딩을 생략하고 사전 점검을 피하십시오. –

답변

4

인터넷의 서버에 ping을 고려할 수 있습니다 도움이 될 수 있습니다. 이 질문에 대한 100 % 답변이 아니지만 다른 관점에서 도움이 될 수 있습니다.

using System.Net; 
using System.Net.NetworkInformation; 

using (Ping Packet = new Ping()) 
{ 
    if (Packet.Send(IPAddress.Parse(IP), 1000, new byte[] { 0 }).Status == IPStatus.Success)) 
    { 
     // ... 
    } 
} 
+0

패킷이 라우터 사이의 커피 가끔 멈추는 것처럼 보였으므로 "연결이 끊어졌습니다"라고보고하기 전에 적어도 3 번 핑을 시도해 봅니다. 그렇지 않으면이 간단한 방법으로 동의합니다. – Alex

2

시도

public static bool IsConnectedToInternet() 
{ 
     ConnectionProfile connectionProfile = NetworkInformation.GetInternetConnectionProfile(); 
     return (connectionProfile!=null && connectionProfile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess); 
} 
관련 문제