GARANTIR DESCONTO

Fórum Comando para fechar programa com TCP Client Server #430238

03/12/2012

0

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

Responder

Posts

04/12/2012

Fernando Vr

Ninguém tem idéia??
Responder

Gostei + 0

04/12/2012

Rodolpho Silva

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.
Responder

Gostei + 0

04/12/2012

Fernando Vr

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??
Responder

Gostei + 0

04/12/2012

Wasley Portes

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

Gostei + 0

04/12/2012

Fernando Vr

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.
Responder

Gostei + 0

04/12/2012

Fernando Vr

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??

Responder

Gostei + 0

04/12/2012

Rodolpho Silva

Ah, é um serviço (TService)?

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

if (Mensagem = 'FECHARPROGRAMA') then 
DoShutdown;
Responder

Gostei + 0

04/12/2012

Wasley Portes

Você irá enviar uma mensagem, ao receber no servidor você pode executar um Application.Terminate.
Responder

Gostei + 0

05/12/2012

Fernando Vr

[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.
Responder

Gostei + 0

05/12/2012

Fernando Vr

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar