ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Cliente e Servidor (SOCKETS)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
iplouzada
Novato
Novato


Registrado: Sexta-Feira, 22 de Mai de 2015
Mensagens: 2

MensagemEnviada: Sex Mai 22, 2015 4:05 pm    Assunto: Cliente e Servidor (SOCKETS) Responder com Citação

Olá pessoal.
Sou bem novato na programação em geral, e estou tentando fazer alguma coisinha utilizando sockets.
O meu objetivo, é pegar as coordenadas do cursor, enviar pro servidor, e do servidor, enviar pra todos os clientes conectados. Bem, de certa forma funciona. O problema é o seguinte: eu envio as coordenadas em uma string com o seguinte formato: (coordenadaX + '-' + coordenadaY), sempre que o mouse se move. Quando um cliente receber esta string, ele manipula a string, e da posição 0 até o (traço-1), consigo a coordenada x, e do (traço+1), até o final, consigo a coordenada Y. Até ai tudo bem, até funciona, mas quando eu movo o mouse muito rapido, ele parece mandar mais de uma mensagem por vez, causando erros do tipo:
1234-32 is not a valid integer value.
Ou seja, parece estar pegando a coordenada Y da ultima string, e mais a outra string completa, ja que a coordenada Y é obtida depois do traço até o final.
Bom, não acredito que seja necessário mostrar meu código, mas caso seja, eu coloco.
Caso alguem saiba sobre o assunto, ficarei muito grato.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
claudio.ferreira
Profissional
Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013
Mensagens: 667

MensagemEnviada: Sex Mai 22, 2015 5:15 pm    Assunto: Responder com Citação

Penso que você deveria somente enviar as coordenadas quando o mouse parasse em algum lugar. Com o mouse em movimento e enviando a cada movimento feito você vai ter que enfileirar as chamadas ao server pois o send é muito mais lento que o movimento do mouse.
_________________
Sistema SNGPC para farmácias
http://www.cmasistemas.com.br
Rastreabilidade de Medicamentos
https://www.sncm.com.br
Soluções em Delphi
https://delphisolutions.wordpress.com/
.
"E não sabendo que era impossível, foi lá e fez"
Mark Twain
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Dom Mai 24, 2015 2:10 am    Assunto: Responder com Citação

use delimitadores ou protocolos.

Delimitadores
[Mouse@X:Y] aqui você sabe que o comando inicia em [ e finaliza em ] e que X inicia logo após o @ finalizando em : que por sua vez o Y inicia logo após o : e finalizando em ]
Cheque sempre se o comando chegou completo pois socket costuma partir ou juntar os texto enviado, que acredito que seja seu problema.
Imagine que ao fazer dois sendo em seguida no seu caso:
123-234
125-237
Isso pode chegar ao servidor da seguinte forma
123-234125-237
Sem delimitadores adequados não dá para saber onde começa ou termina os dois sends.

Protocolos
vc cria bem parecido com os delimitadores exemplo
X$80ADY$12FD
Onde todo os sends possui o mesmo tamanho
Ou seja 12
Sendo X a coordenada X e $80AD seu valor em hexadecimal contendo dois bytes
O mesmo vale para.Y que tem seu valor igual a $12FD

Em delimitadores você precisa sempre questionar se tem o início e fim de comando antes de processar as informações.

Protocolos você precisa sempre questionar se o mesmo possui o tamanho correto neste caso 12 caso contrário o mesmo deve ser descartado.

Bom é espero que isso te dê a idéia de como fazer.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Dom Mai 24, 2015 2:18 am    Assunto: Responder com Citação

Aqui mesmo no fórum você encontra resposta de como solucionar problemas com os sends que vieram juntos ou partidos.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
iplouzada
Novato
Novato


Registrado: Sexta-Feira, 22 de Mai de 2015
Mensagens: 2

MensagemEnviada: Dom Ago 16, 2015 11:06 pm    Assunto: Responder com Citação

strak2012 escreveu:
use delimitadores ou protocolos.

Delimitadores
[Mouse@X:Y] aqui você sabe que o comando inicia em [ e finaliza em ] e que X inicia logo após o @ finalizando em : que por sua vez o Y inicia logo após o : e finalizando em ]
Cheque sempre se o comando chegou completo pois socket costuma partir ou juntar os texto enviado, que acredito que seja seu problema.
Imagine que ao fazer dois sendo em seguida no seu caso:
123-234
125-237
Isso pode chegar ao servidor da seguinte forma
123-234125-237
Sem delimitadores adequados não dá para saber onde começa ou termina os dois sends.

Protocolos
vc cria bem parecido com os delimitadores exemplo
X$80ADY$12FD
Onde todo os sends possui o mesmo tamanho
Ou seja 12
Sendo X a coordenada X e $80AD seu valor em hexadecimal contendo dois bytes
O mesmo vale para.Y que tem seu valor igual a $12FD

Em delimitadores você precisa sempre questionar se tem o início e fim de comando antes de processar as informações.

Protocolos você precisa sempre questionar se o mesmo possui o tamanho correto neste caso 12 caso contrário o mesmo deve ser descartado.

Bom é espero que isso te dê a idéia de como fazer.


Muito obrigado Strak, consegui dessa forma, muito eficaz delimitar a string enviada, funcionando perfeitamente.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB