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


2 participantes

    Visual basic 6 Winsock - Parte II

    DragonicK
    DragonicK
    Experiente
    Experiente


    Mensagens : 543
    Créditos : 81

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

     Visual basic 6 Winsock - Parte II Empty Visual basic 6 Winsock - Parte II

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

    Como trabalhar com os dados que chegam ao servidor?
    Não podemos enviar os dados para o servidor de qualquer jeito, pois não saberemos identificar de qual pessoa veio ou que dados são esses.

    Devemos enviar "frases" para o servidor. Estas "frases" devem conter ínicio, meio e fim.

    Se eu enviar para o servidor a seguinte frase: "Hoje eu roubei pão na casa do joão"
    E seguidamente enviar a frase: "Hoje eu estou com a pepeka quente"

    O servidor irá armazenar essas duas mensagens em apenas uma variavel 
    "Hoje eu roubei pão na casa do joão Hoje eu estou com a pepeka quente"

    Por esse motivo é importante que as "frases" devem conter ínicio, meio e fim.

    "Frase 1, Hoje eu roubei pão na casa do joão, FIM"
    "Frase 2, Hoje eu estou com a pepeka quente, FIM"

    Frase 1" e "Frase 2" é o ínicio da mensagem, ou seja, o cabeçalho.
    "Hoje eu roubei pão na casa do joão" é o meio, ou seja, os dados.
    FIM, indica o fim da mensagem. "Ah vá, sério? não, pera, você descobriu sozinho?"

    Então, se eu mandesse essas duas frases, uma seguida da outra. Ficaria assim:
    "Frase 1, Hoje eu roubei pão na casa do joão, FIM Frase 2, Hoje eu estou com a pepeka quente, FIM"

    Todos os dados que chegam ao servidor, vamos guardar dentro de uma variavel. Todas as mensagens são guardadas dentro de uma única variável.

    Exemplo : 
    variavel = variavel & (dados que estão chegando no servidor)

    Se eu precisar enviar os dados de um cliente com nome, rg e telefone?
    Precisarei criar 3 mensagens para isso?

    ClienteNome, "DragonicK", FIM
    ClienteRG, "241235123", FIM
    ClienteTelefone, "666-666", FIM

    Se enviar as "frases" separadas (como no exemplo acima) eles não vão chegar no mesmo tempo para uma função ser executada. Por isso, é importante entender o que é um pacote de dados.

    Pacote é só o nome da variável que contém todos os dados que vai para o servidor.
    Todos os dados do cliente, terão que estar em uma única "frase", ou seja, um pacote.  
    Vamos para de usar "frase" para usar pacote, ou melhor, packet (do inglês, pacote)

    packet= "Dragonic", "241235123", "666-666"

    Podemos criar apenas um pacote e, adicionar algo para distinguir esses dados.
    packet = CadastroCliente, "DragonicK", "SEPARAR", "241235123", "SEPARAR", "666-666", FIM

    CadastroCliente = Cabeçalho (Início da pacote)
    DragonicK         = nome do cliente (Meio)
    SEPARAR          = SEPARADOR
    241235123       = RG (Meio)
    SEPARAR          = SEPARADOR
    666-666           = Telefone (Meio)
    FIM                  = FIM ("Ah vá, sério? não, pera, você descobriu isso sozinho de novo?")

    Pronto, agora podemos identificar nossos dados no servidor.
    E aqui entra a parte onde manipularemos os dados que chegam ao servidor. 
    Com as funções Mid e InStr nós podemos pegar qualquer pedaço de um texto.

    Vamos declarar 3 variaveis do tipo string. 
     Visual basic 6 Winsock - Parte II Vwxw

    A variável buffer será responsável por armazenar todos os dados que chegam no servidor.
    A variável SEP_CHAR será o nosso separador de dados.
    A variável END_CHAR será o fim da mensagem.

    Agora, vamos definir as 2 variavel com algum caractere.
     Visual basic 6 Winsock - Parte II Yb36

    Para a SEP_CHAR indiquei '@' e para END_CHAR indiquei ';' (ponto e virgula)
    Então, o pacotes de um cadastro de um cliente, poderia ser.

    packet = ClienteCadastro @ DragonicK @ 241235123 @ 666-666 ; 

    Então, primeiro devemos separar todos os pacotes quebrando no ; (ponto e vírgula). Depois só nos resta quebrar esse pacotes onde há @ e joga-la dentro de um array.

    dados(1) = ClienteCadastro
    dados(2) = DragonicK
    dados(3) = 241235123
    dados(4) = 666-666

    Vamos modificar o evento Data_Arrival para processar cada pacote que chega ao servidor.
     Visual basic 6 Winsock - Parte II Itk1

     Visual basic 6 Winsock - Parte II C0o2
    Toda informação que chega ao servidor, é processada por ordem, os dados que chegaram primeiro serão processados primeiro.

    Toda informação que chega ao server é colocada dentro da variável buffer. Essa variável apenas acumula as informações que chegam ao server.

    Obtém a posição do primeiro caractere ; (ponto e vírgula) que está na variável buffer. 

    Um exemplo mais fácil de entender, "batata;" 
    O ponto e vírgula é o número 7, ou seja, ele é o sétimo caractere da frase. A variavel Start irá conter a posição do caractere ";" na variavel buffer.


    Esse loop ficará executando até que não exista mais nenhum ";" na variavel buffer. Quando a variável Start for igual a 0, acaba o loop.

    Faz uma cópia do conteúdo que está na variável buffer, mas somente do primeiro caractere até um caractere antes do ";"  (Start - 1).
    Pegando apenas nosso pacote, os dados 
    que enviamos. 

    Já que fez uma cópia dos nosso dados para a variável packet, o pacote já pode ser removida da variável buffer.

    Procura novamente se há algum ";" (ponto e vírgula) na variavel buffer para repetir novamente o processo.

    Mostra o pacote recebido em uma caixa de mensagem

    Agora, vamos ao cliente e adicionar as variáveis e atribuir no form_load.
     Visual basic 6 Winsock - Parte II Qhn7

    Antes de continuar a editar, se você seguiu essa aula. Abra o servidor e clique em Start. Connect com o cliente ao servidor e envie o seguinte texto.

    Akaruz ; Cristabel ; DragonicK;

     Visual basic 6 Winsock - Parte II Uf4

    Perceba que o servidor dividiu uma única mensagem em 3 partes, pois definimos que ; seria o final de casa mensagem.

     Visual basic 6 Winsock - Parte II 6y9d
    Winsock Aula 2 - Parte 1


    Voltando ao projeto, alterei o conteúdo do SEP_CHAR e END_CHAR no servidor e no cliente. Para não dar nenhum erro, se por acaso tivermos que cadastrar o email de alguém. 
    O servidor irá quebrar o texto em 2 partes: juliosperandio@hotmail.com se tornará em juliosperandio e hotmail.com retirando o @. Por esse motivo que o conteúdo dentro de SEP_CHAR e END_CHAR deve ser algo que nunca será usado entre os dados transmitidos.

     Visual basic 6 Winsock - Parte II 56at

    Adicionei 4 textbox e 1 novo Command button. 

     Visual basic 6 Winsock - Parte II Xryq

    No Command3, eu alterei o método para enviar a mensagem ao servidor, os separadores da mensagem já estão junto ao código, no textobox, só é necessário escrevera a mensagem desejada.

     Visual basic 6 Winsock - Parte II 2nrh

    No evento click do command4, adicionei o código para enviar o texto dos 4 textbox para o servidor.

     Visual basic 6 Winsock - Parte II 3pdh

    No servidor eu adicionei uma nova sub para processar os dados que são separados pelo END_CHAR.

     Visual basic 6 Winsock - Parte II F553
    No Data_Arriaval, troque o MsgBox pelo HandleData. Todos os dados que chegam no servidor não serão mais mostrados, serão processados pela sub HandleData

     Visual basic 6 Winsock - Parte II Exmg

     Visual basic 6 Winsock - Parte II Bk1s

    Download Winsock Aula 2 - Parte 2


    http://www.mediafire.com/download/zqewrt3att437tz/Wisnock+Aula+2+-+Parte+2.rar

    Próxima aula, como fazer o servidor responder.
    Tobi S2
    Tobi S2
    Novato
    Novato


    Mensagens : 14
    Créditos : 2

     Visual basic 6 Winsock - Parte II Empty Re: Visual basic 6 Winsock - Parte II

    Mensagem por Tobi S2 Seg Fev 17, 2014 2:24 am

    Levo muito tempo para terminar as aulas porq ter q escrever tudo, seria mais rapido os códigos não estivessem com imagens, por um lado é até bom que treino vb6 Successful

    Ótima aula!

      Data/hora atual: Sáb Nov 23, 2024 6:10 pm