MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!

Participe do fórum, é rápido e fácil

MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!
MMORPG Brasil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Visual basic 6 Winsock - Parte II

3 participantes

Ir para baixo

Esse tópico foi útil?

Visual basic 6 Winsock - Parte II I_vote_lcap80%Visual basic 6 Winsock - Parte II I_vote_rcap 80% 
[ 4 ]
Visual basic 6 Winsock - Parte II I_vote_lcap20%Visual basic 6 Winsock - Parte II I_vote_rcap 20% 
[ 1 ]
Visual basic 6 Winsock - Parte II I_vote_lcap0%Visual basic 6 Winsock - Parte II I_vote_rcap 0% 
[ 0 ]
 
Total de votos : 5
 
 

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

Mensagem por DragonicK Sáb 24 Ago 2013, 02:13

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
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
DragonicK
Membro de Honra
Membro de Honra

Mensagens : 315

Ir para o topo Ir para baixo

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

Mensagem por AlexsandroUchiha Sáb 24 Ago 2013, 10:14

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
AlexsandroUchiha
Membro Sênior
Membro Sênior

Mensagens : 412

Ir para o topo Ir para baixo

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

Mensagem por guifs Sáb 24 Ago 2013, 10:18

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.
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 tutorial
guifs
guifs
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

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

Mensagem por DragonicK Sáb 24 Ago 2013, 11:47

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.
O cliente se conecta por TCP/IP, o exemplo está na aula 1.

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.

Visual basic 6 Winsock - Parte II Opvi
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
DragonicK
Membro de Honra
Membro de Honra

Mensagens : 315

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos