Fechamento inesperado da aplicacao

Delphi

18/08/2005

Olá... eu desenvolvi um aplicativo Cliente/Servidor utilizando o protocolo TCP (Indy). Eu utilizo os componentes idTCPClient e idTCPServer.

No cliente eu envio alguns dados dessa forma:

var
  Buffer: String;
begin
  comandos...
  idTCPCliente.WriteLn(Buffer);  //ENVIO DOS DADOS
  Buffer := idTCPCliente.ReadString(2); //RESPOSTA DO SERVER
  comandos...
end;


Tudo funciona perfeitamente, Porem depois de algum tempo rodando (esse sistema tem que rodar 24 horas por dia) ou algumas horas o sistema simplismente cai. Se fecha sozinho e pronto. O bloco do servidor eh protegido por try except entao nao mostra nehuma msg mais grava um log. Eu olho esse log e nao tem nada.

Eu utilizo o OnExecute do component idTCPServer para receber as informações:

procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var Buffer, Usuario, Senha: String; Operacao, LenUsuario, LenSenha: Byte; begin try Buffer := AThread.Connection.ReadString(1); Move(Buffer[1], Operacao, 1); case Operacao of 0: // LOGANDO NO SERVIDOR begin try Buffer := AThread.Connection.ReadString(2); Move(Buffer[1], LenUsuario, 1); Move(Buffer[2], LenSenha, 1); Buffer := AThread.Connection.ReadString(LenUsuario + LenSenha); Usuario := Descriptografa(Copy(Buffer, 1, LenUsuario)); Senha := Descriptografa(Copy(Buffer, LenUsuario + 1, LenSenha)); IBQLogin.Close; IBQLogin.Params[0].Value := Usuario; IBQLogin.Params[1].Value := Senha; IBQLogin.Open; if IBQLogin.RecordCount = 0 then begin AThread.Connection.WriteLn(#0 + ´*´); Exit; end; AThread.Connection.WriteLn(#0 + ´$´); except AThread.Connection.WriteLn(0 + ´&´); Memo1.Lines.Add(´Erro´); Memo1.Lines.SaveToFile(´.\log.txt´); end; end; end; except end; end;


Tambem.. eu testei com ADO e qdo eu abro a tabela (TADOQuery) da uma msg de erro se o bloco nao estiver protegido com try execpt. E a tabela nao eh aberta. Mais se ela ja estiver aberta e eu fecha-la e abri-la novamente funciona normal.

No cliente funciona normalmente e nao da nenhum tipo de erro.

Se alguem tiver alguma noção do que eh.. eu agradeço.

t+


Crash

Crash

Curtidas 0

Respostas

Crash

Crash

18/08/2005

sobe...


GOSTEI 0
Crash

Crash

18/08/2005

sobe


GOSTEI 0
Crash

Crash

18/08/2005

aff... ta dificil... que decadencia... a galera soh ta respondendo perguntas de iniciantes.. to vendo q vou ter que procurar em outro forum msm....



e sobe... ultima tentativa!


GOSTEI 0
Massuda

Massuda

18/08/2005

Não sei se é o caso, mas seu código executa duas operações dentro da thread do cliente no servidor que deveriam ser executadas via Synchronize (ou usando uma classe derivada de TIdSync):[list:bad31f6e75][*:bad31f6e75]o acesso ao banco de dados[*:bad31f6e75]a atualização de um memo[/list:u:bad31f6e75]Normalmente o acesso ao BD costuma dar problemas, pois geralmente os componentes de acesso ao BD não suportam multithread.


GOSTEI 0
Crash

Crash

18/08/2005

vlw msm.. eu acho q eh isso mesmo.. as vezes o banco retorna valores errados nas consultas... mto provavelmente eh isso mesmo.. vlw...


vo procurar alguma solução. se eu nao encontrar eu te mando uma mp.

t+


GOSTEI 0
POSTAR