TIdTCPServer e TIdTCPClient

Delphi

28/06/2011

Boa tarde pessoal,
    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

Abraão Monteiro

Curtidas 0

Respostas

Abraão Monteiro

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: 
 

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
POSTAR