Visual basic 6 Winsock - Parte II
3 participantes
Página 1 de 1
Esse tópico foi útil?
Visual basic 6 Winsock - Parte II
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.
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.
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.
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.
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;
Perceba que o servidor dividiu uma única mensagem em 3 partes, pois definimos que ; seria o final de casa mensagem.
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.
Adicionei 4 textbox e 1 novo Command button.
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.
No evento click do command4, adicionei o código para enviar o texto dos 4 textbox para o servidor.
No servidor eu adicionei uma nova sub para processar os dados que são separados pelo END_CHAR.
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
Download Winsock Aula 2 - Parte 2
Próxima aula, como fazer o servidor responder.
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.
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.
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.
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.
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;
Perceba que o servidor dividiu uma única mensagem em 3 partes, pois definimos que ; seria o final de casa mensagem.
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.
Adicionei 4 textbox e 1 novo Command button.
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.
No evento click do command4, adicionei o código para enviar o texto dos 4 textbox para o servidor.
No servidor eu adicionei uma nova sub para processar os dados que são separados pelo END_CHAR.
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
Download Winsock Aula 2 - Parte 2
Próxima aula, como fazer o servidor responder.
Última edição por DragonicK em Qui 29 Ago 2013, 19:13, editado 1 vez(es)
DragonicK- Membro de Honra
- Mensagens : 315
Re: Visual basic 6 Winsock - Parte II
Não entendi muito o significado do ";" e dos "packet",e também não entendi muito oque faz o client se conecta ao servidor.
AlexsandroUchiha- Membro Sênior
- Mensagens : 412
Re: Visual basic 6 Winsock - Parte II
Alexsandro se olhar bem na lista, esse tutorial ele está marcado como avançado,precisa conhecer um pouco mais sobre vb para compreender melhor,eu tenho umas noções muito básicas sobre vb,mais entendi o tutorialAlexsandroUchiha escreveu:Não entendi muito o significado do ";" e dos "packet",e também não entendi muito oque faz o client se conecta ao servidor.
guifs- Membro Vitalicio
- Mensagens : 561
Re: Visual basic 6 Winsock - Parte II
O cliente se conecta por TCP/IP, o exemplo está na aula 1.AlexsandroUchiha escreveu:Não entendi muito o significado do ";" e dos "packet",e também não entendi muito oque faz o client se conecta ao servidor.
Quando você compra algo pela internet, a empresa coloca o seu produto dentro de um pacote e envia para sua casa.
É a mesma coisa, colocamos as informações dentro de uma variavel chamada pacote, e enviamos para o servidor. O Servidor recebe muitos pacotes de dados a cada segundo, precisamos colocar algo para indicar o fim de cada pacote, senão isso ficaria tudo amontoado e não saberiamos nem o que está acontecendo. Então, eu defini ; (ponto e vírgula) para ser o final de um pacote de dados.
A partir da imagem acima, podemos ter a noção de que "Akaruz" é um pacote assim como "DragonicK", "Saci"e etc.
Podemos quebrar essa variavel buffer simplesmente usando a função Split() e assim obter cada pacote de dados.
Dim tempStr() As string
tempStr = Split(buffer, ";")
tempStr(0) retorna Akaruz
tempStr(1) retorna DragonicK
etc ...
DragonicK- Membro de Honra
- Mensagens : 315
Tópicos semelhantes
» Visual basic 6 Winsock - Parte III
» Visual basic 6 Winsock - Parte IV
» Visual basic 6 Winsock - Parte I
» Visual basic 6 Winsock - Parte V
» Visual Basic 6
» Visual basic 6 Winsock - Parte IV
» Visual basic 6 Winsock - Parte I
» Visual basic 6 Winsock - Parte V
» Visual Basic 6
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Dom 08 Abr 2018, 18:40 por JorgeZinhoo002
» Ojkjeeeee
Seg 10 Out 2016, 23:19 por Frozen
» Naruto Great Ninja Batle
Dom 09 Out 2016, 14:29 por GuiinhoLP
» Recrutamento de um Designer para jogo de CDZ.
Sex 23 Set 2016, 18:37 por newbie123
» Serviços de suporte maker( Programação , Design , PixelArt ) E Vendas de Jogos
Qui 22 Set 2016, 20:11 por Eduardo
» Serviços de suporte maker( Programação , Design , PixelArt ) E Vendas de Jogos
Qui 22 Set 2016, 20:11 por Eduardo
» Serviços de suporte maker( Programação , Design , PixelArt ) E Vendas de Jogos
Qui 22 Set 2016, 20:09 por Eduardo
» Projeto Dbz
Qua 31 Ago 2016, 23:46 por 157
» Avaliação - Sprites Naruto
Qua 31 Ago 2016, 17:09 por 157
» [Sprites] DBZ (Plix)
Qua 31 Ago 2016, 14:13 por 157
» Super Pack - Bleach V.2
Qua 31 Ago 2016, 13:02 por 157
» [PEDIDO][PROJETO][RECRUTAMENTO] DYNISTYGAMES
Ter 30 Ago 2016, 10:04 por 157
» [PEDIDO][PROJETO][RECRUTAMENTO] DYNISTYGAMES
Ter 30 Ago 2016, 10:03 por 157
» [PEDIDO][PROJETO][RECRUTAMENTO] DYNISTYGAMES
Ter 30 Ago 2016, 10:02 por 157
» [Pedido] Contador de resets na FrmMain
Sáb 13 Ago 2016, 17:45 por killers97
» [Recrutamento]
Qua 10 Ago 2016, 23:09 por Monsters
» Ajuda erro no Cliente e Servidor do EEB 2.6!
Qua 20 Jul 2016, 19:53 por Binholx
» Como criar tilesets para Eclipse Origins 3.0 (POKÉMON)
Qua 29 Jun 2016, 19:46 por Sir Aaron
» Recursos Pokemons
Qua 29 Jun 2016, 19:34 por Sir Aaron
» erro frm flash
Qua 25 maio 2016, 13:51 por vava123
» Pedido - Pack de star wars
Qui 19 maio 2016, 05:06 por edsonpet
» [Ajuda] Sobre como por o servidor on por ip fixo
Ter 17 maio 2016, 16:14 por vava123
» Illusion Dimension - O Misterio do ID: BETA TESTE ONLINE
Sex 06 maio 2016, 20:02 por LksFlorencio
» [NSME] Naruto Shinobi Maker Engine
Qua 23 Mar 2016, 15:11 por luana1457
» Script /base,/casa Igual DBZ Forces
Dom 21 Fev 2016, 07:34 por JorgeZinhoo002
» [Pedido]Colar Tsunade item sprite eclipse origin
Qui 21 Jan 2016, 07:38 por lawllietbr
» [Pedido] Elysium
Sáb 19 Dez 2015, 11:31 por luana1457
» Naruto - Recruta
Ter 15 Dez 2015, 18:40 por Uchiha ~
» [Avaliação] - Kirito from Sword Art Online; Red and Pikachu from Pokemon.
Qua 25 Nov 2015, 13:43 por Thanakii
» [Avaliação] - Kenpachi Zaraki from Bleach; Libra Shiryu From Saint Seiya.
Qua 25 Nov 2015, 12:55 por Thanakii
» Demonstração de Sprites (Á VENDA!)
Qua 25 Nov 2015, 12:40 por Thanakii
» [Sistema de Reset]Para Eclipse .
Ter 24 Nov 2015, 16:51 por VithorUchi
» Cada Guild Nascer em Certo Mapa
Qui 12 Nov 2015, 06:13 por fabiofeijó_HIT
» Dragon Ball z Fusion A Grande Volta
Qui 29 Out 2015, 15:17 por fabiofeijó_HIT
» Ajuda com Ip fixo
Seg 26 Out 2015, 16:07 por GalaxyHells15
» Como Fazer um GUI no Eclipse Origins
Dom 18 Out 2015, 22:10 por Jeanleee
» Shisui Susanoo
Dom 18 Out 2015, 20:23 por Jeanleee
» Fantasy Art Online
Dom 18 Out 2015, 16:41 por daviih123
» Ajuda !!
Seg 05 Out 2015, 12:13 por andersonzika
» como passar o usuário e senha para o MainMenu?
Seg 28 Set 2015, 22:03 por Bëzerk
» Ru time ero 13 Type mismatch
Seg 28 Set 2015, 09:08 por andredarle
» Jarvis 1.3 Download
Qua 23 Set 2015, 18:42 por soares125
» [Avaliação/Disponibilização]Árvore 64x64
Qua 23 Set 2015, 15:15 por Over~
» Mlk's Zikas Signatures
Ter 22 Set 2015, 21:15 por Aikawa Reborn'
» Pedido de Sistemas
Dom 20 Set 2015, 18:05 por cleyton_05
» [AjudaEEB]Gerador de EXP
Qua 16 Set 2015, 14:04 por Over~
» [Avaliar] Base, Humano e Goblin.
Seg 14 Set 2015, 22:51 por .iBlaz3.
» Fabrica do Tio Cronos!
Dom 13 Set 2015, 21:31 por [ADM]Cronos
» [PixelArt] Minion - Meu malvado favorito
Dom 13 Set 2015, 12:51 por [ADM]Cronos
» [Avaliar] Goku Dragon Ball Z
Qua 05 Ago 2015, 21:36 por Setrux