WINSOCK BUG

MOKOVA666 28/01/2014 23:27:06
#433761
Olá todos.
Estou tendo um problema (Bug) no winsock do vb6.
Estou criando um projeto onde conexão (Cliente) e (Server) se conecta.
Vou explicar o que ocorre e o que eu gostaria de fazer.
Já está tudo conectando, tudo certo nos eventos e tal,
No Cliente existe 1 botão que Envia uma solicitação:
[txt-color=#e80000]Cliente.SendData [Ô]OK[Ô][/txt-color]
O Server recebe essa solicitação:
[txt-color=#e80000]SERVER.GetData DADOS[/txt-color]

Nisso o Server verifica qual o dado e re-envia uma solicitação:
[txt-color=#e80000]If DADOS = [Ô]OK[Ô][/txt-color]

[txt-color=#e80000]SERVER.SendData [Ô]OK[Ô] [ô]Login Efetuado
SERVER.SendData Saldo [ô]Envia o Saldo da Conta[/txt-color]

O server manda um OK e o saldo.
No cliente ele vai receber os dados do server em uma variavel, só que, ai que está o BUG, pois ao colocar os dois codigos seguidos ali:
[txt-color=#e80000]SERVER.SendData [Ô]OK[Ô] [ô]Login Efetuado
SERVER.SendData Saldo [ô]Envia o Saldo da Conta[/txt-color]

Não acontece NADA, ele não enviar e nada acontece.
Eu gostaria de que o Winsock envia se as 2 solicitação.
Obrigado!
OCELOT 29/01/2014 10:30:26
#433773
Certeza que não está enviando ou é você que não está recebendo direito?

Primeiro de tudo, se estiver usando TCP os dados não chegam da forma como você deve estar pensando

Se você enviar dados em sequencia eles provavelmente cheguem juntos como uma coisa só, pois TCP é um protocolo de stream, o próprio windows pode na verdade esperar um pouco quando você envia os dados para mandar tudo junto em um pacote só caso os dados sejam pequenos.

O que provavelmente está acontecendo é que você está usando o GetData e tentando ver se chegou o [Ô]OK[Ô], mas na verdade deve ter chegado um [Ô]OKvalordosaldo[Ô]
MARCELO.TREZE 29/01/2014 12:34:36
#433794
Resposta escolhida
tente o doevents após o primeiro senddata

SERVER.SendData [Ô]OK[Ô] [ô]Login Efetuado
DoEvents
SERVER.SendData Saldo [ô]Envia o Saldo da Conta
MOKOVA666 29/01/2014 17:59:08
#433879
Citação:

:
Certeza que não está enviando ou é você que não está recebendo direito?

Primeiro de tudo, se estiver usando TCP os dados não chegam da forma como você deve estar pensando

Se você enviar dados em sequencia eles provavelmente cheguem juntos como uma coisa só, pois TCP é um protocolo de stream, o próprio windows pode na verdade esperar um pouco quando você envia os dados para mandar tudo junto em um pacote só caso os dados sejam pequenos.

O que provavelmente está acontecendo é que você está usando o GetData e tentando ver se chegou o [Ô]OK[Ô], mas na verdade deve ter chegado um [Ô]OKvalordosaldo[Ô]


é, realmente está enviando, mais esta chegando exatamente o que você disse, está chegando [Ô]OKvalordosaldo[Ô][/quote]
Citação:

:
tente o doevents após o primeiro senddata

SERVER.SendData [Ô]OK[Ô] [ô]Login Efetuado
DoEvents
SERVER.SendData Saldo [ô]Envia o Saldo da Conta


mesmo com doevents está fazendo a mesma coisa.

Sera que não existe alguma forma de enviar um e logo em seguida que o Cliente receber ai ele enviar o outro?
OCELOT 29/01/2014 20:33:23
#433904
Não, TCP não funciona assim, você precisa saber separar os dados que chegaram.

A comunicação deve funcionar mais ou menos assim, primeira coisa que você precisa é saber separar cada mensagem, se for usar texto como comunicação então pode ser um carácter delimitador

1- Espera chegar dados novos
2- Recebe os dados e adiciona em um buffer (este pode já ter dados nele, então adiciona sempre no final dele)
3- Verifica se o buffer tem dados suficientes para processar, se não tiver volta para o nº 1
4- Remove os dados do começo do buffer referente a primeira mensagem que vai ser processada
5- Faz o que tem que fazer com a mensagem
6- Volta para o nº 3

Para saber se o buffer tem dados suficientes para processar você tem que saber separar cada mensagem, se for usando um carácter delimitador basicamente você verifica se tem um carácter deste no buffer, se sim então você sabe que tem uma mensagem inteira lá, se não então você precisa esperar que cheguem mais dados.

Você tem que sempre levar em consideração o seguinte, quando se envia mensagens por TCP pode acontecer de mais de uma mensagem chegar ao mesmo tempo, que é muito comum com mensagens pequenas, e também pode acontecer de uma única mensagem chegar em duas partes (ou mais), mas isso geralmente vai acontecer só se a mensagem for muito grande
Tópico encerrado , respostas não são mais permitidas