IdTCPServer e IdTCPClient
Estou tipo fazendo um chat e me bati com um problema!
O TCPServer fica na maquina 10.1.1.1
Os TCPClient fica nas maquinas 10.1.1.2 até 10.1.1.10
Tudo uma blz, só que por exemplo o cabo da rede foi desconectado, e como ja foi mencionado aqui no forum que só é detectado a perda de conexão depois que é enviado algo!
Então fiz tipo um time acada 1 minuto ele verifica a conexão, só que mesmo ele enviando acha que ainda ta conectado!
E agora??
O TCPServer fica na maquina 10.1.1.1
Os TCPClient fica nas maquinas 10.1.1.2 até 10.1.1.10
Tudo uma blz, só que por exemplo o cabo da rede foi desconectado, e como ja foi mencionado aqui no forum que só é detectado a perda de conexão depois que é enviado algo!
Então fiz tipo um time acada 1 minuto ele verifica a conexão, só que mesmo ele enviando acha que ainda ta conectado!
E agora??
Rudá
Curtidas 0
Respostas
Massuda
16/05/2006
Como você está fazendo o teste de conexão no timer?
GOSTEI 0
Rudá
16/05/2006
Estou mandando uma string
WriteLn(´teste´);
WriteLn(´teste´);
GOSTEI 0
Massuda
16/05/2006
Mas é só isso ou você espera alguma resposta?
Um jeito de saber com certeza se a conexão está ruim ou o servidor parou é enviar [b:f1455f8f16]e[/b:f1455f8f16] esperar por uma resposta (um dos parâmetros de ReadLn permite especificar um timeout na espera).
Um jeito de saber com certeza se a conexão está ruim ou o servidor parou é enviar [b:f1455f8f16]e[/b:f1455f8f16] esperar por uma resposta (um dos parâmetros de ReadLn permite especificar um timeout na espera).
GOSTEI 0
Rudá
16/05/2006
Descupe não entendi, então o que devo fazer para verificar?
GOSTEI 0
Massuda
16/05/2006
Você tem que no TIdTCPClient enviar para o TIdTCPServer (ou o contrário, se preferir) alguma coisa (por exemplo, como você fez, ´TESTE´) e fazer o TIdTCPServer enviar uma resposta ao TIdTCPClient (por exemplo, ´OI´). Assim você sabe que a conexão está boa e que o servidor está rodando.
Assumindo que o cliente irá testar o servidor, a rotina do timer pode ser...
Assumindo que o cliente irá testar o servidor, a rotina do timer pode ser...
procedure TSeuForm.TesteTimer(.... begin IdTCPClient1.WriteLn(´PING´); S := IdTCPClient1.ReadLn(...); // pode testar se recebe e se é a resposta esperada end;
GOSTEI 0
Massuda
16/05/2006
A propósito, algo muito parecido foi discutido [url=http://forum.clubedelphi.net/viewtopic.php?t=69507]neste tópico[/url].
GOSTEI 0