2009-05-13 17 views
7

XBAP(ブラウザでホストされるWPF)アプリケーションにネットワーク接続があるかどうかを判断する方法はありますか?そうでない場合、C#と.NETで書かれた従来のWindowsクライアントは、接続性をどのように判断しますか?WPF/XBAPアプリケーションからのネットワーク接続を検出しますか?

基本的にユースケースは、WiFi経由でイントラネットに接続されたモバイルノートパソコンで動作するXBAPアプリケーションです。ラップトップはインターネットに接続できません。 WiFi接続は、ユーザがその時点でどこにいるかに依存してもよいし、存在しなくてもよい。あなたは、ゲートウェイのIPアドレスを取得する場合http://msdn.microsoft.com/en-us/library/system.net.networkinformation.gatewayipaddressinformation(loband).aspx

、そしてあなたは、Pingの(http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping(loband).aspx)それは、おそらく接続されていることができます。

+0

ここ

// Add EventHandler for NetworkAddressChanged event NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(AddressChangedCallback); 

は、そのイベントが発生するが、ときに呼び出されるメソッドですこのコードを試してみてください。 http://stackoverflow.com/questions/520347/how-do-i-check-for-a-network-connection/38179695#38179695 – Kumar

+0

http://stackoverflow.com/questions/520347/how-do-i- check-for-a-network-connection/38179695#38179695 – Kumar

答えて

4

GateWayIPAddressInformationは動作するはずです。

3

あなたのInitializeComponent()でこれを行います

internal void AddressChangedCallback(object sender, EventArgs e) 
{ 
    // Check for NetworkConnectivity 
    _isInternetConnectionActive = new NetworkConnectivity().IsInternetConnected; 
} 

ここNetworkConnectivityクラスです:

public class NetworkConnectivity 
{ 
    private List<IPAddress> _ipAddresses = new List<IPAddress>(); 

    public NetworkConnectivity() 
    { 
     _ipAddresses = new List<IPAddress>(); 
    } 

    #region Public Properties 
    public int CountIPAddresses 
    { 
     get { return this.IPAddresses.Count; } 
    } 
    public List<IPAddress> IPAddresses 
    { 
     get 
     { 
      _ipAddresses.Clear(); 
      // Get a listing of all network adapters 
      NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); 
      foreach (NetworkInterface adapter in adapters) 
      { 
       IPInterfaceProperties adapterProperties = adapter.GetIPProperties(); 
       GatewayIPAddressInformationCollection addresses = adapterProperties.GatewayAddresses; 
       // If this adapter has at least 1 IPAddress 
       if (addresses.Count > 0) 
       { 
        // Loop through all IP Addresses 
        foreach (GatewayIPAddressInformation address in addresses) 
        { 
         _ipAddresses.Add(address.Address); 
        } 
       } 
      } 
      return _ipAddresses; 
     } 
    } 
    public bool IsInternetConnected 
    { 
     get 
     { 
      if (this.CountIPAddresses == 0) 
      { 
       return false; 
      } 
      else 
      { 
       //IPAddress[] ips = ResolveDNSAddress("google.com"); 
       //return PingIPAddressPool(ips); 
       return PingIPAddress("72.14.204.104"); // Google IP 
      } 
     } 
    } 
    #endregion 

    #region Public Methods 
    public IPAddress[] ResolveDNSAddress(string UrlAddress) 
    { 
     IPHostEntry hostInfo = Dns.Resolve(UrlAddress); 
     return hostInfo.AddressList; 
    } 
    public bool PingIPAddressPool(IPAddress[] ipAddresses) 
    { 
     foreach (IPAddress ip in ipAddresses) 
     { 
      if (PingIPAddress(ip.Address.ToString())) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
    public bool PingIPAddress(string ip) 
    { 
     // Pinging 
     IPAddress addr = IPAddress.Parse(ip); 
     Ping pingSender = new Ping(); 
     PingOptions options = new PingOptions(); 

     // Use the default Ttl value which is 128, 
     // but change the fragmentation behavior. 
     options.DontFragment = true; 

     // Create a buffer of 32 bytes of data to be transmitted. 
     string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 
     byte[] buffer = Encoding.ASCII.GetBytes(data); 
     int timeout = 15; // seconds to wait for response 
     int attempts = 2; // ping attempts 
     for (int i = 0; i < attempts; i++) 
     { 
      PingReply reply = pingSender.Send(addr, timeout, buffer, options); 
      if (reply.Status == IPStatus.Success) 
      { return true; } 
     } 
     return false; 
    } 
    #endregion 

} 
+0

このコードは良いですが、Dns.Resolve()のようないくつかの関数は廃止されました。 – Raptor

関連する問題