TIdTCPServer e TIdTCPClient
Boa tarde pessoal,
Estou tentando implementar um sistema cliente/servidor simples utilizando TCP. Para fechar o servidor utilizo o seguinte source:
Só que toda vez que vou fechar pela janela ou pelo botão na aplicação eu recebo uma mensagem de 'stack overflow'. Estou utilizando o Delphi 7. No cliente eu recebo também este erro. Alguém poderia me dar algumas sugestões ou opinião de como evitar este erro? Desde já agradeço a atenção.
Abraão
Estou tentando implementar um sistema cliente/servidor simples utilizando TCP. Para fechar o servidor utilizo o seguinte source:
procedure TForm1.btFecharClick(Sender: TObject);
begin
fecharAplicacao;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
fecharAplicacao;
end;
procedure TForm1.fecharAplicacao;
begin
try
try
if servidor.Active = true then begin
servidor.Active := false;
end;
finally
close;
end;
except on E : Exception do ShowMessage('+ Erro: ' + E.ClassName + #13#10 + '- Mensagem: ' + E.Message);
end;
end;
Só que toda vez que vou fechar pela janela ou pelo botão na aplicação eu recebo uma mensagem de 'stack overflow'. Estou utilizando o Delphi 7. No cliente eu recebo também este erro. Alguém poderia me dar algumas sugestões ou opinião de como evitar este erro? Desde já agradeço a atenção.
Abraão
Abraão Monteiro
Curtidas 0
Respostas
Abraão Monteiro
28/06/2011
Eu estou tentando manipular todas as exceções possíveis durante a execução da conexão entre o cliente e o servidor. Tenho o seguinte trecho de código:
Gostaria de colocar no lugar de (***) algum comando que parasse a execução dos procedimentos. Exemplo:
Logo que a função 2 recebesse uma exceção automaticamente ele fosse para o FIM e não executasse a função 3 e 4. Seria possível ou eu teria que tratar cada Result das funções? Desde já agradeço as respostas.
try if not cliente.Connected then begin cliente.Connect; adicionarTexto('Conexão estabelecida com o host: ' + ip_servidor); end; auxiliar := AllTrim(comando); cliente.IOHandler.WriteLn(auxiliar); adicionarTexto('Comando enviado para o host [' + ip_servidor + ']. Aguarde...'); auxiliar := ''; auxiliar := cliente.IOHandler.ReadLn; adicionarTexto('Recebido do host [' + ip_servidor + ']: ' + #13#10#9 + auxiliar); except //Falha durante a transmissão de dados on E: EIdException do begin Result := false; adicionarTexto('ERRO: Detectado um erro de REDE durante a comunicação:' + #13#10#9 + E.Message); // (***) end; on E: Exception do begin Result := false; adicionarTexto('ERRO: Detectado um erro DESCONHECIDO durante a comunicação:' + #13#10#9 + E.Message); // (***) end; end;Gostaria de colocar no lugar de (***) algum comando que parasse a execução dos procedimentos. Exemplo:
INÍCIO FUNÇÃO 1 FUNÇÃO 2 <------------ Lança uma exceção FUNÇÃO 3 FUNÇÃO 4 FIM
Logo que a função 2 recebesse uma exceção automaticamente ele fosse para o FIM e não executasse a função 3 e 4. Seria possível ou eu teria que tratar cada Result das funções? Desde já agradeço as respostas.
GOSTEI 0