VB .NET - Verificando a conexão com a internet


 O artigo de hoje é um artigo para iniciantes da linguagem VB .NET e mostra como verificar a conexão com a internet em aplicações Windows Forms usando a linguagem VB .NET.

Se você está começando agora com a linguagem VB .NET, pode ter muitas dúvidas de como realizar algumas tarefas, mesmo sabendo como fazer isso usando outra linguagem.

Hoje eu selecionei como tarefa básica: verificar a conexão com a internet em uma aplicação Windows Forms.

Veremos que existe mais de uma forma de realizar essa tarefa.

Então chega de conversa e vamos ao trabalho...

Recursos usados :

Criando a solução no VS 2013 Express Edition

Abra o VS 2013 Express for Windows desktop e clique em New Project;

A seguir selecione Visual Studio Solutions -> Blank Solution

Informe o nome VBNET_Web e clique no botão OK;

Com isso teremos uma solução VBNET_Web criada à qual iremos adicionar o nosso projeto.

Criando a classe com métodos para verificar a conexão

No menu File clique em FILE -> Add -> New Project;

A seguir selecione o template Windows Forms Application e informe o nome VerificaConexaoInternet

No formulário form1.vb vamos incluir os seguintes controles a partir da ToolBox:

Disponha os controles no formulário conforme o leiaute da figura abaixo:

Agora vamos incluir uma classe em nosso projeto onde vamos definir alguns métodos para verificar a conexão com a internet.

No menu PROJECT Clique em Add Class e informe o  nome VerificaConexao;

A seguir inclua o código abaixo nesta classe:

Imports System.Net
Public Class VerificaConexao
    Public Shared Function VerificaConexao_TcpSocket() As Boolean
        Try
            Dim cliente As New Sockets.TcpClient("www.google.com", 80)
            cliente.Close()
            Return True
        Catch ex As System.Exception
            Return False
        End Try
    End Function
    Public Shared Function VerificaConexao_WebClient() As Boolean
        Try
            Using client = New WebClient()
                Using stream = client.OpenRead("http://www.google.com")
                    Return True
                End Using
            End Using
        Catch
            Return False
        End Try
    End Function
    Public  Shared Function VerificaConexao_WebRequest() As Boolean
        Dim objUrl As New System.Uri("http://www.youtube.com")
        Dim objWebReq As System.Net.WebRequest
        objWebReq = System.Net.WebRequest.Create(objUrl)
        Dim objresp As System.Net.WebResponse
        Try
            objresp = objWebReq.GetResponse
            objresp.Close()
            objresp = Nothing
            Return True
        Catch ex As Exception
            objresp = Nothing
            objWebReq = Nothing
            Return False
        End Try
    End Function
   Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef _
        lpSFlags As Int32, ByVal dwReserved As Int32) As Boolean
    Private Enum InetConnState
        modem = &H1
        lan = &H2
        proxy = &H4
        ras = &H10
        offline = &H20
        configured = &H40
    End Enum
    Public Shared Function VerificaConexao_Win32() As Boolean
        Dim lngFlags As Long
        If InternetGetConnectedState(lngFlags, 0) Then
            If lngFlags And InetConnState.lan Then
               ElseIf lngFlags And InetConnState.modem Then
               ElseIf lngFlags And InetConnState.configured Then
               ElseIf lngFlags And InetConnState.proxy Then
               ElseIf lngFlags And InetConnState.ras Then
               ElseIf lngFlags And InetConnState.offline Then
            End If
            Return True
        Else
            Return False
        End If
    End Function
End Class

Essa classe possui 3 métodos estáticos :

  1. VerificaConexao_TcpSocket - Verifica a porta 80, padrão para o tráfego http, de um site que esta sempre oline. A resposta é mais rápida que usar o WebRequest;
  2. VerificaConexao_WebClient -  Recebe dados de uma URL de um site que esta sempre online;
  3. VerificaConexao_WebRequest - Envia uma requisição para um site que supõe-se estar sempre online e obtém a resposta;
  4. VerificaConexao_Win32 - Usa a função InternetConnectedState da API Win32;

Essa função recebe dois parâmetros.

A função retorna TRUE indicando se existe uma conexão ou modem ativo, ou FALSE se não existir conexão ou se todas as conexão não estão ativas.

E finalmente também podemos usar o método My.Computer.Network.Ping(servidor) que pinga um servidor específico.

O método Ping não é um método à prova de falhas para determinar a disponibilidade de um computador remoto: a porta onde ping esta atuando no computador de destino pode estar desligada ou a solicitação de ping pode ser bloqueada por um firewall ou roteador.

O endereço usado no método precisa ser um DNS resolvido e não pode ser precedido por "http://".

Implementando o código no formulário

Agora vamos implementar o código usando a classe VerificaConexao() em nosso formulário.

Quando o formulário for apresentando o usuário deverá clicar em qualquer um dos botões para verificar a conexão.

O código do formulário é o seguinte:

     Private Sub btnVerificaConexao1_Click(sender As Object, e As EventArgs) Handles btnVerificaConexao1.Click
        If VerificaConexao.VerificaConexao_Win32 = True Then
            MessageBox.Show("Conexão Disponível.", "Conectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("Sem Conexão Disponível.", "Desconectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

    Private Sub btnVerificaConexao2_Click(sender As Object, e As EventArgs) Handles btnVerificaConexao2.Click
        If VerificaConexao.VerificaConexao_WebRequest Then
            MessageBox.Show("Conexão Disponível.", "Conectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("Sem Conexão Disponível.", "Desconectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If

    End Sub

    Private Sub btnVerificaConexao3_Click(sender As Object, e As EventArgs) Handles btnVerificaConexao3.Click
        If VerificaConexao.VerificaConexao_WebClient Then
            MessageBox.Show("Conexão Disponível.", "Conectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("Sem Conexão Disponível.", "Desconectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

    Private Sub btnVerificaConexao4_Click(sender As Object, e As EventArgs) Handles btnVerificaConexao4.Click
        If VerificaConexao.VerificaConexao_TcpSocket Then
            MessageBox.Show("Conexão Disponível.", "Conectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("Sem Conexão Disponível.", "Desconectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

    Private Sub btnVerificaConexao5_Click(sender As Object, e As EventArgs) Handles btnVerificaConexao5.Click
        If My.Computer.Network.Ping("www.google.com") Then
            MessageBox.Show("Conexão Disponível.", "Conectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("Sem Conexão Disponível.", "Desconectado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

    Private Sub btmEncerrar_Click(sender As Object, e As EventArgs) Handles btmEncerrar.Click
        Me.Close()
    End Sub

No código acima estamos usando os métodos da classe VerificaConexao() e o método Ping() do recurso My do VB .NET para verificar a conexão com a internet.

Executando o projeto e verificando a conexão iremos obter:

Nota: Em outro artigo eu vou abordar a classe HttpClient que é um cliente HTTP moderno para a plataforma .NET,e fornece uma API extensível para acessar tudo o que é exposto através de HTTP.

Pegue o projeto completo aqui : VBNET_Web.zip

Rom 3:10 como está escrito: Não há justo, nem sequer um.

Rom 3:11 Não há quem entenda; não há quem busque a Deus.

Rom 3:12 Todos se extraviaram; juntamente se fizeram inúteis. Não há quem faça o bem, não há nem um só.


 

Referências:


José Carlos Macoratti