WINSOCK BUG
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!
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[Ô]
SERVER.SendData [Ô]OK[Ô] [ô]Login Efetuado
DoEvents
SERVER.SendData Saldo [ô]Envia o Saldo da Conta
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?
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