Comando para fechar programa com TCP Client Server

Delphi

03/12/2012

Olá amigos, tenho uma aplicação TCP cliente e servidor criado com os componentes da Indy10.

Gostaria do cliente enviar um comando para o servidor para que o programa fosse fechado, mas não está dando certo, alguém sabe pq, e sabe como q posso fazer para este comando funcionar?

estou fazendo desta maneira:

Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); 

if (Mensagem = 'FECHARPROGRAMA') then 
Application.Terminate;


Obrigado!!
Fernando Vr

Fernando Vr

Curtidas 0

Respostas

Fernando Vr

Fernando Vr

03/12/2012

Ninguém tem idéia??
GOSTEI 0
Rodolpho Silva

Rodolpho Silva

03/12/2012

Tente usar o Halt:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); 

if (Mensagem = 'FECHARPROGRAMA') then 
Halt;


Porém, isso é como "matar" o seu processo no S.O. ou seja, termina a execução do mesmo sem tratamento algum.
GOSTEI 0
Fernando Vr

Fernando Vr

03/12/2012

Tente usar o Halt:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); 

if (Mensagem = 'FECHARPROGRAMA') then 
Halt;


Porém, isso é como "matar" o seu processo no S.O. ou seja, termina a execução do mesmo sem tratamento algum.


Ah obrigado amigo, testarei aqui, mas fazendo desta forma tem algo q possa ser prejudicial ao programa? por terminar sem nenhum tratamento??
GOSTEI 0
Wasley Portes

Wasley Portes

03/12/2012

Fernando, você pode fazer a comunicação com Sockets. Fica muito bom.
GOSTEI 0
Fernando Vr

Fernando Vr

03/12/2012

Fernando, você pode fazer a comunicação com Sockets. Fica muito bom.


Então Wasley Alves Portes eu não gostaria de utilizar sockets pq eu to usando o Delphi XE2, queria utilizar o Indy mesmo.

Mas em sockets você tem alguma idéia de como fazia pra fechar totalmente o aplicativo? do modo q o amigo Rodolpho123 passou ele até fecha o servidor, mas o mesmo continua ativo nos processos do windows, não está fechando completamente.
GOSTEI 0
Fernando Vr

Fernando Vr

03/12/2012

Tente usar o Halt:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); 

if (Mensagem = 'FECHARPROGRAMA') then 
Halt;


Porém, isso é como "matar" o seu processo no S.O. ou seja, termina a execução do mesmo sem tratamento algum.



Eu testei aqui Rodolpho123, e to tendo um problema ainda, o form do programa some da tela com o comando que vc me passou, mas ai tentei executar o servidor novamente e dá o seguinte erro.

[b]Could not bind socket. Address and port are already in use.[/b]

Então fui verificar os processos do windows e o programa continua aberto, só o form q sumiu mas o programa continua lá. Está dando o mesmo problema do Application.Terminate;

Será q não tem nenhum modo de fazer ele fechar por completo??

GOSTEI 0
Rodolpho Silva

Rodolpho Silva

03/12/2012

Ah, é um serviço (TService)?

Tente isso:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); 

if (Mensagem = 'FECHARPROGRAMA') then 
DoShutdown;
GOSTEI 0
Wasley Portes

Wasley Portes

03/12/2012

Você irá enviar uma mensagem, ao receber no servidor você pode executar um Application.Terminate.
GOSTEI 0
Fernando Vr

Fernando Vr

03/12/2012

[b]Rodolpho123[/b]
Ah, é um serviço (TService)?

Tente isso:
Mensagem := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default); 

if (Mensagem = 'FECHARPROGRAMA') then 
DoShutdown;


Então Rodolpho123 Não é um Tservice não, é um VCL Forms Aplication com TIdTCPServer dos componentes do Indy10.

O comando pra fechar, chega a fechar o form, mas continua ativo nos processos do windows, da uma olhada na imagem abaixo:

[img]http://i45.tinypic.com/15ov402.jpg[/img]

[b]Wasley Alves Portes[/b]
Você irá enviar uma mensagem, ao receber no servidor você pode executar um Application.Terminate.


Eu já fazia desta forma Wasley, da uma olhada no início deste tópico como eu tava fazendo ao receber a mensagem do cliente, o problema q a unica coisa q acontece é q o form fecha mas a aplicação continua rodando nos processos do windows. Da uma olhada na imagem acima que foi feita depois q o comando pra fechar foi executado. Você pode perceber q a aplicação continua lá.

Muito obrigado pela ajuda amigos, se conhecer outra solução por favor me ajude, ja pesquisei muito sobre isso e até agora não encontrei nenhuma solução.
GOSTEI 0
Fernando Vr

Fernando Vr

03/12/2012

Olá amigos, muito obrigado pela atenção, em outro forum q estou participando me passaram a forma correta e funcionou perfeitamente. Para quem tiver o mesmo problema q eu, segue a solução.

O comando para fechar o aplicativo completamente inclusive pelo processo do windows, seria este:

[b] TerminateProcess(GetCurrentProcess, 0);[/b]

Então o meu código ficou desta forma:

if (Mensagem = 'FECHARPROGRAMA') then 
   TerminateProcess(GetCurrentProcess, 0);


Abraços.
GOSTEI 0
POSTAR