Eu desenvolvi uma aplicação onde necessitava verificar a conexão com a internet, se estava ativa ou não, caso contrário a aplicação iria parar.Para verificar se a conexão com a internet está ativa podemos usar a API InternetGetConnectedState. Mais informações sobre a API e o parâmetro “Description” em
http://msdn.microsoft.com/en-us/library/aa384702(VS.85).aspx
Usando API:
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
/// <summary>
/// verificar se está conectado à internet
/// </summary>
/// <returns>true se existir uma conexão</returns>
/// <remarks>retornar true não quer dizer que o destino esteja alcançável, utilize
/// IsReachable(url) para saber se o destino está alcançável</remarks>
public static bool IsConnectedToInternet()
{
int Desc;
bool ret = InternetGetConnectedState(out Desc, 0);
return ret;
}
Mas neste caso se o método retornar true, isso não quer dizer que realmente podemos acessar o endereço web que precisamos. Por exemplo: Podemos estar conectados por um servidor proxy, onde precisamos fazer uma autenticação.
Neste caso temos que validar se nosso destino está alcançável, acessível.
Veja como:
/// <summary>
/// verifica se o destino informado está alcançável. (Acessível)
/// </summary>
/// <param name="_url">endereço URL</param>
/// <returns>true se estiver alcançável</returns>
public static bool IsReachable(string _url)
{
System.Uri Url = new System.Uri(_url);
System.Net.WebRequest webReq;
System.Net.WebResponse resp;
webReq = System.Net.WebRequest.Create(Url);
try
{
resp = webReq.GetResponse();
resp.Close();
webReq = null;
return true;
}
catch
{
webReq = null;
return false;
}
}
Se este método retornar true, aí sim podemos dizer que nossa aplicação tem acesso a internet.
Veja um exemplo em uma aplicação console.
static void Main(string[] args)
{
if (IsConnectedToInternet())
{
Console.WriteLine("Conectado a internet");
//mas...
//estarmos conectado não quer dizer que podemos acessar o endereço que desejamos
//para isto temos que validar se nosso destino é alcançável.
if (IsReachable("http://desenvolvedores.net"))
Console.WriteLine("temos acesso ao site http://desenvolvedores.net");
else
Console.WriteLine("não temos acesso ao site http://desenvolvedores.net");
}
else
Console.WriteLine("Não está conectado a internet");
Console.ReadKey();
}
Você poderia modificar a rotina IsConnectedToInternet e nela mesmo já validar se a conexão realmente está ativa. Para isso pode se usar um site que você tem certeza que estará sempre online. (Google, Microsoft, Desenvolvedores.net).
Veja a nova versão.
/// <summary>
/// verificar se está conectado a internet
/// </summary>
/// <returns>true se existir uma conexão</returns>
/// <remarks>retornar true não quer dizer que o destino esteja alcançável, utilize
/// IsReachable(url) para saber se o destino está alcançável</remarks>
public static bool IsConnectedToInternet()
{
int Desc;
bool ret = InternetGetConnectedState(out Desc, 0);
if (ret)
ret = IsReachable("http://desenvolvedores.net");
return ret;
}
|