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.)
Precisamos de administradores e moderadores!! Clique Aqui!

Anuncio


    Visual Basic - Componente Winsock Saiba Tudo Aqui

    Compartilhe

    MrViSiBLe
    Fundador ViSiBLe
    Fundador ViSiBLe

    Número de Mensagens : 3688
    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


    _________________
    MrViSiBLe Gosto? agradeça. clique em [b]+ Ta Ai do lado Olha  >>>>>Nao Custa Nada[/b]
    [Você precisa estar registrado e conectado para ver esta imagem.]
    [Você precisa estar registrado e conectado para ver esta imagem.]
    [Você precisa estar registrado e conectado para ver esta imagem.]
    [Você precisa estar registrado e conectado para ver esta imagem.]

      Data/hora atual: 12/2/2016, 15:11