Forum ViSiBLe

Bem Vindo
Se registrares neste fórum, podes fazer parte da nossa comunidade.Prezamos aqui pela participação ACTIVA de cada membro.


Atençao: Nao precisa Confirma a sua conta no hotmail (Basta Registrar e Começar a participar do forum.)

WWW.FORUMVISIBLE.COM

Temos vagas na STAFF !! Clique Aqui!

Visual Basic - Componente Winsock Saiba Tudo Aqui

Compartilhe
avatar
MrViSiBLe
Administrador
Administrador

Número de Mensagens : 3778
Idade : 24
Localização : Cuiaba
Agradecimentos Agradecimentos : 864
Data de inscrição : 10/12/2008

Visual Basic - Componente Winsock Saiba Tudo Aqui

Mensagem por MrViSiBLe em 10/6/2010, 01:01

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
CODE
winsock.Bind(portalocal,iplocal)


BytesReceived -> Retorna o número de bytes recebidos


Close -> Fecha uma conexão
CODE
winsock.close


Connect -> Conecta à um host
CODE
winsock.connect - ' quando um host e porta jí foram especificados - ou winsock.connect(host,porta) caso contrírio.


GetData -> Obtém dos dados recebidos em uma variível
CODE
winsock.getdata(variavel,tipo,max)

Onde:
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
CODE
winsock.listen


LocalHostName -> Mostra o nome do host local.

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.
CODE
winsock.senddata(data)


Onde data é o que se serí enviado.

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

CODE


Private Sub Winsock1_Close()

' código aqui

End Sub


Evento Connect
Ocorre quando uma conexão é completada

CODE


Private Sub Winsock1_Connect()

'código aqui

End Sub


Evento ConnectionRequest
Ocorre quando hí um pedido de conexão

CODE


Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

'código aqui

End Sub


Onde requestID = ID do pedido de conexão a aceitar.

Evento DataArrival
Ocorre quando são recebidos dados.

CODE


Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

'código aqui

End Sub


Onde bytestotal = número de bytes recebidos

Evento Error

Ocorre quando foi resultado um erro.

CODE


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


Os valores que nos interessa:

number = número do erro
Description = descrição do erro


Evento SendComplete
Ocorre quando o envio de dados é completado

CODE


Private Sub Winsock1_SendComplete()

'código aqui

End Sub


Evento SendProgress

Ocorre quando dados estão sendo enviados

CODE


Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)

'código aqui

End Sub


Onde
:

bytesSent
= número de bytes enviados;
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:
CODE


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:

CODE


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


Estados do socket:

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:

CODE


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


Bem , é isso, Espero que Com esse Tutorial Vocês Aprendam um Pouco Mais Sobre o Winsock.

Tutorial Por : dark_side

    Data/hora atual: 9/23/2017, 01:42