Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rodrigo Defende

Winsock - enfileiramento

Recommended Posts

Tudo bom para todos.Estou fazendo uma aplicacao que ja esta quase pronta mas encontrei um problema.A minha aplicacao gerencia pela rede uma impressora que faz a gravacao de cartoes SmartCard.Usando o Winsock pela rede eu conecto o client no server e envio um comando para a impressora puxar um cartao, ler o seu codigo, esse codigo eh devolvido para o client que faz uma busca e retorna as informacoes para a impressora que faz a gravacao no cartao. Ateh ai tudo bem.O problema eh que eu nao posso permitir que outro client faca uma requisao enquanto o primeiro nao terminar o processo que foi iniciado pois como ja foi lido o cartao ele tem um cadastro que ja esta aberto no client e os dados nao podem ser misturados.Pergunta: Tem como eu ir enfileirando os pedidos que vao chegando vai Winsock e no final de cada processo ir pegando o subsequente?O meu problema todo esta ai pois um teste que eu fiz aqui o primeiro client enviou um pedido e o processo comecou mas durante esse processo um segundo client tambem enviou o pedido e na hora de devolver a informacao ele misturou.Como eu faco para que o Winsock servidor devolva exatamente para o client medidante seu ip?Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não dá pra ajudar muito sem uma idéia precisa do que é enviado para o servidor e de como ele recebe isso, mas vamos tentar. O servidor aceita múltiplas conexões? Ou é tudo feito por um único socket? Provavelmente os seus dados tem um limitador (uma sequência de caracteres que indica o começo/final dos mesmos), então bastaria se guiar por ele para saber quando terminam os dados de uma requisição e onde começam os de outra. Isso é possível dentro do seu esquema?Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem vamos lah.A aplicacao recebe por uma string com separador onde ela se compoem basicamente assim:A primeira solicitacao que eh a de leitura eh assim:Acao;NumSolicitacaoO retorno que o servidor dah para o client eh assim:Erro;NumCartao;NumSolicitacaoE a ultima comunicacao que o client faz para o servidor eh:Acao;URLdaImpressao;NumSolicitacaoPara cada conexao no servidor eu crio um socket novo, tipo, wListem(i) onde wListem eh o Winsock.O meu problema eh que existem no minino 5 clients conectados enviando informacoes mas eu tenho de tratar um de cada vez pois essa impressora funciona um pouco diferente das outras. Quando você faz a solicitacao de leitura do cartao ela puxa o cartao, le o numero serial do cartao e fica com ele dentro do leitor impossibilitando uma nova leitura ateh que o processo inicial seja finalizado ou seja o cartao seja espelido do leitor soh que os clients nao param de enviar outras solicitacoes, entao eu tenho de bolar uma maneira de ir colocando isso em um array, ou numa listbox, sei lah - estou aberto a ideias - e ir tratando posteriormente isso ai. Logico que eu estou tambem pensando em um timeout pois nao posso deixar que um client fique esperando tipo 1,2 minutos para ser atendido, mas isso eh outra coisa e eu acho que ja sei como resolver.O maior problema eh colocar isso ai em fila e efetuar as respostas para seus respectivos solicitantes sem misturar.Aguardo ideias ou sugestoes - tudo sera bem vindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.