Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


    Visual basic 6 Winsock - Parte V

    DragonicK
    DragonicK
    Experiente
    Experiente


    Mensagens : 542
    Créditos : 81

    Ficha do personagem
    Nível: 1
    Experiência:
    Visual basic 6 Winsock - Parte V Left_bar_bleue0/0Visual basic 6 Winsock - Parte V Empty_bar_bleue  (0/0)
    Vida:
    Visual basic 6 Winsock - Parte V Left_bar_bleue30/30Visual basic 6 Winsock - Parte V Empty_bar_bleue  (30/30)

    Visual basic 6 Winsock - Parte V Empty Visual basic 6 Winsock - Parte V

    Mensagem por DragonicK Seg Jan 27, 2014 7:14 pm

    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. 

    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 e Membros
    Ao adicionar o objeto no formulário, observando suas propriedades:

    Name: Nome do Controle
    Index: Especifica se é um array de controles
    Left: Posicionamento à esquerda
    Localport: Porta local
    Protocol: 0 - sckTCPProtocol(TCP) ou 1 -  sckUDPProtcol(UDP)
    RemoteHost: Host alvo para conectar
    RemotePort: Porta alvo para conectar
    Tag: Informações Extra
    Top: Posicionamento Vertical

    Membros do componente:

    Accept:
    Aceita uma conexão.
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Winsock.Accept(requestID)

    resquestID é o valor da requisição

    Bind:
    Binda o winsock.
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Winsock.Bind(PORTA_LOCAL,IP_LOCAL)

    BytesReceived: 
    Retorna o número de bytes recebidos

    Close:
    Fecha uma conexão
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Winsock.Close


    Connect:
    Conecta à um host
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Winsock.Connect  'Quando um host e porta já foram especificados
    Winsock.Connect(IP, Porta) 


    GetData:
    Obtém dos dados recebidos em uma variível
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Winsock.GetData(Variavel, Tipo, Max)

    Variavel= Variavel que armazenará os dados
    Opcionais:
    Tipo = Tipo de dados: vbstring(padrao), vblong(inteiro), vbbyte
    Max = Tamanho máximo de dados a receber.

    Listen:
    Coloca o socket em modo de espera
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    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 e 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: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Winsock.Senddata(Data)

    Data = O que será enviado

    State: Obtém o estado do socket (listados adiante)

    Eventos
    Vimos as propriedades e membros do winsock, veremos agora a parte mais interessante em termos de interatividade.

    Close:
    Ocorre quando o socket é fechado
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Private Sub Winsock1_Close()
    ' Códigos
    End Sub


    Connect:
    Ocorre quando uma conexão é completada
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Private Sub Winsock1_Connect()
    ' Códigos
    End Sub


    ConnectionRequest:
    Ocorre quando há um pedido de conexão
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
    ' Códigos
    End Sub

    requestID = ID do pedido de conexão a aceitar

    DataArrival:
    Ocorre quando são recebidos dados.
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    ' Códigos
    End Sub

    bytestotal = número de bytes recebidos

    Error:
    Ocorre quando foi resultado um erro.
    Code: -------------------------------------------------------------Selecionar conteúdo
    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)
    ' Códigos
    End Sub

    Os valores que nos interessa
    number = número do erro
    description = descrição do erro

    SendComplete:
    Ocorre quando o envio de dados é completado
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Private Sub Winsock1_SendComplete()
    ' Códigos
    End Sub


    SendProgress:
    Ocorre quando dados estão sendo enviados
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Private Sub Winsock1_SendProgress(ByVal bytesSent As Long, ByVal bytesRemaining As Long)
    ' Códigos
    End Sub

    bytesSent = número de bytes enviados
    bytesRemaining = número de bytes restantes

    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 fecha-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 1:
    Code: -------------------------------------------------------------Selecionar conteúdo
    Código:
    Function Enviar()
    On Error GoTo verificar

    Winsock1.SendData ("Enviar dados por TCP sem conectar-se antes, 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 2:
    Code: -------------------------------------------------------------Selecionar conteúdo
    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

    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 1:
    Code: -------------------------------------------------------------Selecionar conteúdo
    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

    Por: DarK_Side e FusioN

      Data/hora atual: Qui Mar 28, 2024 11:03 pm