Jump to content
Fórum Script Brasil
  • 0

Problema recebendo dados via Stream


Dolfin

Question

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 to post
Share on other sites

4 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      149405
    • Total Posts
      645894
×
×
  • Create New...