VB - Winsock Tutorial
Descrição : tutorial sobre como trabalhar com o controle Winsock no Visual Basic.
Índice
» Introdução sobre o winsock
» Iniciando
» Propriedades do winsock e membros do winsock
» Eventos do Winsock
» Lidando com erros e estados de conexão
► Introdução sobre o winsock
O componente winsock, presente no Windows, é um dos componentes mais interessantes que podemos citar. Com ele por exemplo, podemos criar chats, jogos multiplayers, clientes de email, e uma variedade de aplicações que use a internet como foco. Sua aplicação em Visual Basic, é bem simples, como veremos a seguir.
► Iniciando
1) Inicie o Visual Basic e crie um projeto Standard EXE.
2) Pressione CTRL+T ou ví em Project-> Components, e adicione o controle: Microsoft Winsock Control 6.0
3) Adicione no form, o objeto WINSOCK, que se encontra na barra de componentes à esquerda.
► Propriedades do winsock e membros do winsock
Ao adicionar o objeto no formulírio, observando suas propriedades, temos:
Name: nome do controle
Index: especifica se o controle é uma array.
Left: Posicionamento à esquerda
Localport: porta local do winsock
Protocol: 0 - sckTCPProtocol(PROTOCOLO TCP) ou 1 -sckUDPProtcol(PROTOCOLO UDP)
RemoteHost: host que iremos nos conectar
RemotePort: porta que iremos nos conectar
Tag: informações extra
Top: posicionamento vertical
Temos os seguintes membros constituintes do componente:
Accept -> Aceita uma conexão
Código de exemplo : winsock.accept(resquestid)
Onde resquestid é o valor da requisição
Bind -> Binda o winsock
BytesReceived -> Retorna o número de bytes recebidosCódigo:winsock.Bind(portalocal,iplocal)
Close -> Fecha uma conexão
Connect -> Conecta à um hostCódigo:winsock.close
GetData -> Obtém dos dados recebidos em uma variívelCódigo:winsock.connect - ' quando um host e porta jí foram especificados - ou winsock.connect(host,porta) caso contrírio.
Onde:Código:winsock.getdata(variavel,tipo,max)
Variavel = variavel que armazenarí os dados
Opicionais:
tipo = tipo de dados: vbstring(padrao), vblong(inteiro), vbsingle(float),vbdouble(double).
Max = tamanho míximo de dados a receber.
Listen -> Coloca o socket em modo de espera
LocalHostName -> Mostra o nome do host local.Código:winsock.listen
LocalIp -> Obtém o IP local
LocalPort -> Obtém/Configura a Porta local
Protocol -> Obtém/configura o protocolo: sckTCPProtocol ou sckUDPProtocol.
RemoteHost -> Obtém/Configura hostname do host.
RemoteHostIP -> Obtém o IP do host.
RemotePort -> Obtém/Configura a porta remota.
SendData -> Envia dados ao host remoto.
Onde data é o que se serí en*****.Código:winsock.senddata(data)
State -> Obtém o estado do socket(serão listados adiante).
► Eventos do Winsock
Vimos as propriedades e membros do winsock, veremos agora a parte mais interessante em termos de interatividade.
Evento Close
Ocorre quando o socket é fechado
Evento ConnectCódigo:Private Sub Winsock1_Close() ' código aqui End Sub
Ocorre quando uma conexão é completada
Evento ConnectionRequestCódigo:Private Sub Winsock1_Connect() 'código aqui End Sub
Ocorre quando hí um pedido de conexão
Onde requestID = ID do pedido de conexão a aceitar.Código:Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long) 'código aqui End Sub
Evento DataArrival
Ocorre quando são recebidos dados.
Onde bytestotal = número de bytes recebidosCódigo:Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 'código aqui End Sub
Evento Error
Ocorre quando foi resultado um erro.
Os valores que nos interessa:Código:Private Sub ws_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) 'Codigo aqui End Sub
number = número do erro
Description = descrição do erro
Evento SendComplete
Ocorre quando o envio de dados é completado
Código:Private Sub Winsock1_SendComplete() 'código aqui End Sub
Evento SendProgress
Ocorre quando dados estão sendo en*****s
Código:Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long) 'código aqui End Sub
Onde:
bytesSent = número de bytes en*****s;
bytesRemaining = número de bytes restantes.
► Lidando com erros e estados de conexão
Abaixo listarei as constantes que representam o comportamento do winsock, ao longo do processo.
Erros mais comuns:
sckAddressInUse -> Ocorre quando a porta utilizada na tentativa de colocar o socket em modo listen, jí estiver sendo usada.
sckAddressNotAvaiable -> Ocorre quando na função Bind, é espeficifado um IP local invílido.
sckAlreadyConnect -> Ocorre quando o socket jí estiver conectado e um pedido para que ele conecte-se é feito, sem fechí-lo previamente.
sckBadState -> O estado do socket não permite tal operação.
sckConnectAborted -> A conexão foi cancelada.
sckConnectRefused -> Conexão recusada.
sckConnectionReset -> A conexão foi reiniciada.
sckHostNotFound -> Host não encontrado.
sckTimedout -> Tempo esgotado
sckWrongProtocol -> protocolo incorreto
Manipulando erros:
Exemplo:
Código:Function enviar() On Error GoTo verificar Winsock1.SendData ("ENVIAR DADOS POR TCP SEM CONECTAR-SEANTES OCASIONA EM ERRO") Exit Function verificar: Select Case Err.Number Case sckBadState: End End Select End Function
No exemplo acima, caso ocorra algum erro, a função é interrompida e salta para 'verificar'. Serí verificado o número do erro, se for o erro referente à sckBadState, o programa encerra.
Pode-se usar o evento ERROR em algumas ocasiões.
Exemplo:
Estados do socket:Código:Private Sub winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) select case number case sckTimedout MsgBox Description end select winsock1.Close End Sub
sckClosed -> Socket fechado.
sckClosing -> Socket fechando.
sckConnecting -> Em processo de conexão.
sckConnectionPending -> Pedido de conexão aguardando.
sckError -> Erro no socket.
sckHostResolved -> Host resolvido.
sckListening -> Aguardando conexões.
sckOpen -> Socket pronto para uso.
SckResolvingHost -> Resolvendo host.
Manipulando estados:
Exemplo:
Bem , é isso, Espero que Com esse Tutorial Vocês Aprendam um Pouco Mais Sobre o Winsock.Código:Function ver_estado() Select Case Winsock1.State Case sckClosed: MsgBox "Socket fechado" Winsock1.LocalPort = 1234 Winsock1.Listen Case sckListening: MsgBox "Socket aguardando..." Winsock1.Close End Select End Function
Creditos: dark_side
Fonte: Pro Code
Última edição por FusioN; 07-08-2010 às 12:25 PM.
Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)
Marcadores