Ir para conteúdo
Fórum Script Brasil
  • 0

Problema recebendo dados via Stream


Dolfin

Pergunta

Bom, primeiramente quero dizer que apesar desse ser meu primeiro post no fórum, já tirei muitas dúvidas aqui, e espero que possam me ajudar com essa. Estou fazendo um programa de Assistência Remota, com o envio da screenshot do ServerSocket através de stream. Já estou conseguindo emular os clicks do mouse e até teclas apertadas, apesar da função não estar muito boa, porém o problema não é esse. O lance é o seguinte, o meu código para envio do stream atual está assim no servidor:

Comando:=Socket.ReceiveText;

if Comando='screen' then

begin

{Aqui começa a função de Bitblt para pegar a imagem,etc...Não interessa pra nós }

jpg.SaveToStream(Stream);

Stream.Position:=0;

Socket.SendText('Screen:' + inttostr(Stream.Size) + #0); //Envio depois do Stream.Size o #0 para delimitar o Size sem misturar com o inicio da imagem

Socket.SendStream(Stream);

-----

Aí surgiu o problema, se no Socket.SendText eu ponho apenas Socket.SendText(inttostr(Stream.Size) + #0); sem o 'Screen:' funciona perfeitamente, porém aí no clientread lá no Cliente, eu não posso usar um if Comando='Screen:' ... E eu preciso disso, prq eu vou receber mais de 1 coisa no clientread e sem isso, é como se todo evento do read fosse uma screen...Abaixo segue o código do cliente para vocês visualizarem melhor:

if LeftStr(Chegando,7) = 'Screen:' then

begin

Delete(Chegando, 1, 7); //Deleto o 'Screen:' da var Chegando, pois ele é só pra identificar que é uma screen, não faz parte da coisa toda...

if not Receiving then //Se o BOOL Receiving ainda for falso(não estiver recebendo) eu pego o Stream.Size enviado e gravo na var stSize

begin

if pos(#0,Chegando) > 0 then //Se encontrar o delimitador #0 que enviei lá no server na var Chegando então...

stSize:=strtoint(copy(Chegando,1,pos(#0,Chegando)-1))//O StSize é o que veio antes dele, ou seja o Stream.Size

else

exit;

begin

Stream:=TMemoryStream.Create;//Crio o Stream

Receiving:=True;//Começo a receber

Delete(Chegando,1,pos(#0,Chegando));//Deleto o que tem antes do #0 ou seja Stream.Size pois não faz parte da imagem

end;

end;

try

Stream.Write(Chegando[1],Length(Chegando));//Começo a escrever o stream recebido

if Stream.Size = stSize then//Aqui me indica o problema,se nesse if eu ponho Stream.Size < stSize ele começa a exibir o inicio da img apenas,porém se fica = ou seja: quando o recebido e escrito, for igual ao stSize que é o Stream.Size enviado do servidor forem iguais,ou seja a img tiver sido recebida por completa...Eu ponho ela num componente Image1...Isso não interessa colar aki também...

---------------------

Bom pessoal, esse código funciona, desde que no servidor tire do Socket.SendText o 'Screen:' e no ClientOnRead ponha apenas começando o if Not Receiving, sem aquele if Chegando = 'Screen:' ....

Pelo que percebi é que o Stream.Size recebido pelo Cliente é sempre menor que o Stream.Size enviado...Parece que o Cliente não consegue receber a imagem toda,só o inicio...mas tenho certeza que o servidor envia a img toda...Prq já puis um ShowMessage lá, indicando o Stream.Size enviado e foi da img toda, porém o recebido pelo Cliente é um pedacinho só...Minimo... Espero que vocês possam me ajudar, tentei formatar o post o máximo possível para organizar as coisas, é bem complicado, mas leiam que vocês vão entender..

Valeu!!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Sim foi uma ótima dica, se eu não quisesse desenvolver o meu. Existem centenas de programas de assistência remota por aí, mas eu estou fazendo um que atende a necessidades particulares do meu ambiente de trabalho. E além disso tem a questão do aprendizado, não é porque existem programas prontos que eu vou desistir de fazer um meu. Ainda não consegui fazer funcionar, se alguém souber... A dúvida continua...

Link para o comentário
Compartilhar em outros sites

  • 0
Sim foi uma ótima dica, se eu não quisesse desenvolver o meu. Existem centenas de programas de assistência remota por aí, mas eu estou fazendo um que atende a necessidades particulares do meu ambiente de trabalho. E além disso tem a questão do aprendizado, não é porque existem programas prontos que eu vou desistir de fazer um meu. Ainda não consegui fazer funcionar, se alguém souber... A dúvida continua...

E além disso tem a questão do aprendizado, não é porque existem programas prontos que eu vou desistir de fazer um meu.

Gostei de ver ... é isso ai amigo ... gostaria de pode te ajudar, mas estou sem tempo para isso... quem sabe outro colega possa lhe ajudar

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Po tá difícil... Eu só consegui descobrir que a imagem só tá vindo um pedaço, não sei porque, já coloquei um while pra ficar lendo a imagem até o tamanho enviado pelo stream seja o mesmo do recebido, mas não adiantou... Engraçado que o código é simples e funciona quando não tem aquele 'if', como já disse no post...Infelizmente acho que o pessoal aqui não sabe qual a conclusão...

Agradeço mesmo assim.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...