Fechamento inesperado da aplicacao
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:
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:
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+
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
Curtidas 0
Respostas
Crash
18/08/2005
sobe...
GOSTEI 0
Crash
18/08/2005
sobe
GOSTEI 0
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!
e sobe... ultima tentativa!
GOSTEI 0
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
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+
vo procurar alguma solução. se eu nao encontrar eu te mando uma mp.
t+
GOSTEI 0