VB6 - Usando o Controle Winsock


A essa altura você já deve ter percebido que a Internet é um caminho sem volta. Dai você pode tirar a seguinte conclusão : "Quem dominar as tecnologias para a Web sai na frente ! ". (Rapazinho inteligente !!). Aproveitando o gancho vamos apresentar um controle presente no VB 6/VB 5 que nos permite comunicar na grande WEB.

Pra começar vamos dar uma pincelada em alguns conceitos básicos que você vai precisar saber para poder usar o Winsock. 

Conceitos Básicos

Na Internet temos uma grande quantidade de máquinas conectadas entre si  formando a grande WEB. Essas máquinas (seu computador) podem se comportar como um cliente e/ou como um servidor havendo assim a possibilidade da troca de informações entre elas. Para se comunicarem essas máquinas utilizam um protocolo de regras comum e um endereço de identificação único. Agora vamos ao glossário:

Porta Serviço
110 POP3
25 SMTP
21 FTP
80 HTTP
6667 IRC
23 TELNET
79 FINGER

Assim a porta 21 realiza o serviço FTP - File Transfer Protocol ; já a porta 80 espera por solicitações de conexão WEB .

O controle Winsock

A primeira coisa que você deve fazer para usar o controle Winsock no seu projeto é carregar o controle na barra de ferramentas. Para isso selecione a opção Project no menu e a seguir clique em Components... .Na caixa de diálogo selecione o controle - Microsoft Winsock Control como na figura abaixo:

Fig 1 - Selecionando o Controle Winsock Fig 2 - O icone do  na barra de ferramentas

Após clicar no botão OK o controle será exibido na caixa de ferramentas e estará pronto para ser inserido no seu projeto. Este controle somente é visível em tempo de desenvolvimento.

Propriedades e Métodos do controle Winsock

Agora veremos as propriedades mais importantes do controle:

Propriedade Descrição
LocalPort É a porta que seu computador usará. Você pode definir a porta com até 4 digitos (Ex: 1234.
RemotePort É a porta da qual sua máquina recebe os dados.
Protocol Protocolo a ser usado na transmissão. ( TCP ou UPD )
RemoteHostIP Retorna o endereço IP de uma máquina remota
LocalIP Retorna o IP de uma  máquina local.
LocalHostName Retorna o nome da máquina local.
BytesReceived Determina a quantidade de dados recebidos. (bytes)
State Define o estado atual do controle. (Veja os possíveis definições desta propriedade. (*)

(*) Possíveis definições da propriedade State:

Constante Valor Descrição
sckClosed 0 Default. Closed
sckOpen 1 Open
sckListening 2 Listening
sckConnectionPending 3 Connection pending
sckResolvingHost 4 Resolving host
sckHostResolved 5 Host resolved
sckConnecting 6 Connecting
sckConnected 7 Connected
sckClosing 8 Peer is closing the connection
sckError 9 Error

Principais métodos e eventos do controle Winsock

Método/Evento Descrição
Accept Aceita uma conexão TCP. 
Connect Solicita uma conexão TCP. Ocorre quando há uma conexão com outro computador.
Close Fecha uma conexão TCP.
DataArrival Onde você coloca o código fonte que você deseja executar quando a informação chegar pela portal local.
GetData Efetua a recepção de dados
Listen Espera por uma conexão TCP.
SendData Envia dados.
SendProgress Indica que você quer controlar a conexão enquanto ela estiver enviando os dados. 
SendComplete Indica o que você quer que aconteça depois que a transferência foi terminada. Ex. Exibir uma mensagem.
ConnectionRequest Solicita uma conexão.
Error Ocorreu um erro.

Usando o Controle Winsock 

Ao roda sua aplicação , se ela estiver no modo servidor esperando alguma solicitação você deverá definir a propriedade LocaPort e invocar o método Listen para deixar o computador disponível. 

winsock1.LocalPort = 1001
winsock1.Listen 

Se estiver no modo cliente você vai precisar definir as propriedades Remote-Host ou RemoteHostIP e Remote Port . Depois basta usar o método Connect para solicitar uma conexão. 

Winsock1.RemoteHost = "geocities.com/"
Winsock1.RemotePort = 80
Winsock1.Connect

Quando você se conecta usando Connect é executado o evento ConnectionRequest do controle Winsock o qual possui o parâmetro requestID. Este parâmetro serve para identificar a conexão de forma única. 

Após a conexão ter sido estabelecida podemos enviar e receber dados, para enviar dados usamos o método SendData :

Winsock1.SendData "dados a serem enviados"

Para receber os dados devemos utilizar o método GetData tendo como parâmetro o nome da variável que irá receber  os dados. Quando os dados sao recebidos eles são colocados no buffer de entrada do controle Winsock e o evento DataArrival é disparado, assim devemos usar o método GetData neste evento:

Private Winsock1_DataArrival()
  Dim variavel 
  winsock1.GetData variavel
  ...
  ...
End Sub

Exemplos Práticos usando o Controle Winsock

Vamos agora por em prática toda essa teoria e mostrar através de pequenos projetos como usar o controle Winsock.Em todos os projetos você deverá fazer referencia ao controle Microsoft Winsock Control como explicado anteriormente. 

1-) Capturando e exibindo o número IP do seu computador durante uma conexão Internet.

Private Sub Command1_Click()
    Text1.Text = Winsock1.LocalIP
End Sub

Ao clicar no botão de comando ( estando conectado) você obtêm o seu IP. Mais simples impossível...

2-) Fazendo o Download de uma página na Internet

Vamos mostrar como usar o controle Winsock para fazer o download de um página de um site. Iremos fazer o download da página index.html do me site no servidor geocities. Para isso temos que definir o nome do servidor a porta para conexão e o local da página que queremos baixar.

Private Sub Command1_Click()
  Winsock1.RemoteHost = "geocities.com"
  Winsock1.RemotePort = 80
  Winsock1.Connect
End Sub
Aqui definimos o nome do servidor e a porta para conexão
Private Sub Winsock1_Connect()
 Dim strCommand As String
 Dim strWebPage As String

 strWebPage = "http://www.geocities.com/macoratti/index.html"
 strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf
 strCommand = strCommand + "Accept: */*" + vbCrLf
 strCommand = strCommand + "Accept: text/html" + vbCrLf
 strCommand = strCommand + vbCrLf

 Winsock1.SendData strCommand
End Sub
Aqui definimos o local da página
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim webData As String
  Winsock1.GetData webData, vbString
  txtwebpage.Text = txtwebpage.Text + webData
End Sub
Aqui recebemos os dados

Pronto !!! conecte-se na internet e rode o aplicativo. Após alguns segundos teremos o seguinte:

Até o próximo artigo... ;-)

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti