Re: RES: RES: RES: [java-list] in.readLine() não retorna !!!
out.println(PING); socket.setSoTimeout(1); String resp = in.readLine(); From: Sergio - InfoSaúde RS [EMAIL PROTECTED] To: 'Sergio Oliveira Jr.' [EMAIL PROTECTED] Subject: RES: RES: RES: [java-list] in.readLine() não retorna !!! Date: Mon, 11 Jun 2001 13:49:29 -0300 Legal, mas não entendí como faço o ping... Eu tenho que fazer uma chamada ao sistema operacional ?? Se sim, como faço isso em java ?? Se o meu in.readObject() está dentro do de um while em uma Thread eu poderia dizer que o setSoTimeout funcionaria como o serverSocket.accept() ?? Ou seja, ele dá um wait na thread até que algo seja enviado pelo stream e se nada for enviado no tempo determinado ele levanta a exceção ?? -Mensagem original- De: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] Enviada em: segunda-feira, 11 de junho de 2001 12:53 Para: [EMAIL PROTECTED] Assunto: Re: RES: RES: [java-list] in.readLine() não retorna !!! Sim e exatamente isso que voce falou e funciona tb para o readObject, pois essa função eh do Socket. O ping tem que ser feito na mão mesmo, através do seu próprio protocolo. Então quando a exceção é levantada eu envio alguma coisa pro cliente e fico esperando a resposta... Se não recebo em tantos segundos assumo que o cara morreu e fecho o socket. Se não morreu volto pro in.readLine(). Infelizmente não há nenhuma função do socket do tipo socket.estouVivoeValido(). Se tivesse iria facilitar bastante as coisas. []'s Sergio Sun Certified Java Programmer Consultor Java From: Sergio - InfoSaúde RS [EMAIL PROTECTED] To: 'Sergio Oliveira Jr.' [EMAIL PROTECTED] Subject: RES: RES: [java-list] in.readLine() não retorna !!! Date: Mon, 11 Jun 2001 11:09:40 -0300 Mas o que exatamente o método setSoTimeout faz ??? Ele fica contado o tempo que passamos por parâmetro pra ele e se o in.readLine() não receber nada através do Stream e o tempo especificado acabar ele levanta uma exceção ??? Como que tu executa um ping do Client no server ??? Tem algum método específico do socket que faz isso ??? Se funciona pro readLine deve funcionar também pro readObject, certo ?? -Mensagem original- De: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] Enviada em: segunda-feira, 11 de junho de 2001 09:34 Para: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Assunto: Re: RES: [java-list] in.readLine() não retorna !!! Funcionou sim, mas tive que fazer com que o cliente dê um ping de tempos em tempos no servidor, para evitar um timeout do in.readLine() causado por longos períodos de inatividade do cliente. Uma coisa é o cliente sumir, outra é ele ficar muito tempo inativo. Então ficou assim: timeout de 10 minutos para o in.readLine(); ping de 4 em 4 minutos do cliente para colocar o in.readLine() para funcionar. []'s Sergio Sun Cerfied Java Programmer Consultor Independente Jav From: Sergio - InfoSaúde RS [EMAIL PROTECTED] To: '[EMAIL PROTECTED]' [EMAIL PROTECTED] Subject: RES: [java-list] in.readLine() não retorna !!! Date: Mon, 11 Jun 2001 09:21:30 -0300 E aí cara Funcionou ??? Te pergunto isso pq estou desenvolvendo uma aplicação que vai passar por este mesmo problema -Mensagem original- De: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] Enviada em: sábado, 9 de junho de 2001 13:22 Para: [EMAIL PROTECTED] Assunto: Re: [java-list] in.readLine() não retorna !!! Acho que a resposta estava na minha frente e eu não vi: socket.setSoTimeout(). Vou testar e ver se funciona! []'s Sergio From: Sergio Oliveira Jr. [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: [java-list] in.readLine() não retorna !!! Date: Sat, 09 Jun 2001 14:10:36 - Tenho um servidor Java que escuta numa porta via um ServerSocket e abre um Thread para cada requisição que ele recebe. Esse Thread recebe o socket e abre um BufferedReader (in) e um PrintStream (out) para se comunicar com o cliente. O problema é o seguinte: Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam. Já andei investigando e descobri que temos que usar socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket está vivo ou se o cliente desapareceu silenciosamente. (Como experiência, conecte duas máquinas via um socket e desligue o cabo de rede de uma delas. A outra vai ficar travada num in.readLine() eternamente se você não estiver usando o KeepAlive!) Tb temos que setar o parametro KeepAliveTime no registry do windows, que o intervalo em milisegundos que o Windows vai dar um ping no Socket para saber se ele ainda está vivo. Se esse parametro não estiver presente no Registry, ele assume como default 2 horas! O problema é que mesmo fazendo esse esquema do KeepAliveTime, estou desconfiado que alguns threads continuam travados para sempre no in.readLine(), o que está fazendo
Re: RES: [java-list] in.readLine() não retorna !!!
Funcionou sim, mas tive que fazer com que o cliente dê um ping de tempos em tempos no servidor, para evitar um timeout do in.readLine() causado por longos períodos de inatividade do cliente. Uma coisa é o cliente sumir, outra é ele ficar muito tempo inativo. Então ficou assim: timeout de 10 minutos para o in.readLine(); ping de 4 em 4 minutos do cliente para colocar o in.readLine() para funcionar. []'s Sergio Sun Cerfied Java Programmer Consultor Independente Jav From: Sergio - InfoSaúde RS [EMAIL PROTECTED] To: '[EMAIL PROTECTED]' [EMAIL PROTECTED] Subject: RES: [java-list] in.readLine() não retorna !!! Date: Mon, 11 Jun 2001 09:21:30 -0300 E aí cara Funcionou ??? Te pergunto isso pq estou desenvolvendo uma aplicação que vai passar por este mesmo problema -Mensagem original- De: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] Enviada em: sábado, 9 de junho de 2001 13:22 Para: [EMAIL PROTECTED] Assunto: Re: [java-list] in.readLine() não retorna !!! Acho que a resposta estava na minha frente e eu não vi: socket.setSoTimeout(). Vou testar e ver se funciona! []'s Sergio From: Sergio Oliveira Jr. [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: [java-list] in.readLine() não retorna !!! Date: Sat, 09 Jun 2001 14:10:36 - Tenho um servidor Java que escuta numa porta via um ServerSocket e abre um Thread para cada requisição que ele recebe. Esse Thread recebe o socket e abre um BufferedReader (in) e um PrintStream (out) para se comunicar com o cliente. O problema é o seguinte: Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam. Já andei investigando e descobri que temos que usar socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket está vivo ou se o cliente desapareceu silenciosamente. (Como experiência, conecte duas máquinas via um socket e desligue o cabo de rede de uma delas. A outra vai ficar travada num in.readLine() eternamente se você não estiver usando o KeepAlive!) Tb temos que setar o parametro KeepAliveTime no registry do windows, que o intervalo em milisegundos que o Windows vai dar um ping no Socket para saber se ele ainda está vivo. Se esse parametro não estiver presente no Registry, ele assume como default 2 horas! O problema é que mesmo fazendo esse esquema do KeepAliveTime, estou desconfiado que alguns threads continuam travados para sempre no in.readLine(), o que está fazendo com que o meu servidor trave uma vez a cada duas semanas por excesso de threads! Alguém já passou por problema semelhante? Tem como forçar um retorno de um in.readLine() travado ? Se tiver acho então que a solução poderia ser um thread monitor para matar os threads que estão travados a muito tempo. []'s Sergio Oliveira Jr. Sun Cerfied Java Programmer Consultor Java _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] - _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] - _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] in.readLine() não retorna !!!
Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam. Não importa se for socket ou não, in.readline() nã retorna se não tem dados mas não há aindo o charater '\n'. Ele somente retorna null se chego no fim do stream. Já andei investigando e descobri que temos que usar socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket está vivo ou se o cliente desapareceu silenciosamente. (Como experiência, conecte duas máquinas via um socket e desligue o cabo de rede de uma delas. A outra vai ficar travada num in.readLine() eternamente se você não estiver usando o KeepAlive!) -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] in.readLine() não retorna !!!
ele retorna se qualquer uma das partes explicitamente fecharem o socket... tb retorna se voce estiver usando o socket.setSoTimeout(), que foi o que eu acabei de descobrir... From: Sven van ´t Veer [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: Re: [java-list] in.readLine() não retorna !!! Date: Mon, 11 Jun 2001 09:30:04 -0300 Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam. Não importa se for socket ou não, in.readline() nã retorna se não tem dados mas não há aindo o charater '\n'. Ele somente retorna null se chego no fim do stream. Já andei investigando e descobri que temos que usar socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket está vivo ou se o cliente desapareceu silenciosamente. (Como experiência, conecte duas máquinas via um socket e desligue o cabo de rede de uma delas. A outra vai ficar travada num in.readLine() eternamente se você não estiver usando o KeepAlive!) -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] - _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
Re: RES: RES: [java-list] in.readLine() não retorna !!!
Sim e exatamente isso que voce falou e funciona tb para o readObject, pois essa função eh do Socket. O ping tem que ser feito na mão mesmo, através do seu próprio protocolo. Então quando a exceção é levantada eu envio alguma coisa pro cliente e fico esperando a resposta... Se não recebo em tantos segundos assumo que o cara morreu e fecho o socket. Se não morreu volto pro in.readLine(). Infelizmente não há nenhuma função do socket do tipo socket.estouVivoeValido(). Se tivesse iria facilitar bastante as coisas. []'s Sergio Sun Certified Java Programmer Consultor Java From: Sergio - InfoSaúde RS [EMAIL PROTECTED] To: 'Sergio Oliveira Jr.' [EMAIL PROTECTED] Subject: RES: RES: [java-list] in.readLine() não retorna !!! Date: Mon, 11 Jun 2001 11:09:40 -0300 Mas o que exatamente o método setSoTimeout faz ??? Ele fica contado o tempo que passamos por parâmetro pra ele e se o in.readLine() não receber nada através do Stream e o tempo especificado acabar ele levanta uma exceção ??? Como que tu executa um ping do Client no server ??? Tem algum método específico do socket que faz isso ??? Se funciona pro readLine deve funcionar também pro readObject, certo ?? -Mensagem original- De: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] Enviada em: segunda-feira, 11 de junho de 2001 09:34 Para: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Assunto: Re: RES: [java-list] in.readLine() não retorna !!! Funcionou sim, mas tive que fazer com que o cliente dê um ping de tempos em tempos no servidor, para evitar um timeout do in.readLine() causado por longos períodos de inatividade do cliente. Uma coisa é o cliente sumir, outra é ele ficar muito tempo inativo. Então ficou assim: timeout de 10 minutos para o in.readLine(); ping de 4 em 4 minutos do cliente para colocar o in.readLine() para funcionar. []'s Sergio Sun Cerfied Java Programmer Consultor Independente Jav From: Sergio - InfoSaúde RS [EMAIL PROTECTED] To: '[EMAIL PROTECTED]' [EMAIL PROTECTED] Subject: RES: [java-list] in.readLine() não retorna !!! Date: Mon, 11 Jun 2001 09:21:30 -0300 E aí cara Funcionou ??? Te pergunto isso pq estou desenvolvendo uma aplicação que vai passar por este mesmo problema -Mensagem original- De: Sergio Oliveira Jr. [mailto:[EMAIL PROTECTED]] Enviada em: sábado, 9 de junho de 2001 13:22 Para: [EMAIL PROTECTED] Assunto: Re: [java-list] in.readLine() não retorna !!! Acho que a resposta estava na minha frente e eu não vi: socket.setSoTimeout(). Vou testar e ver se funciona! []'s Sergio From: Sergio Oliveira Jr. [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: [java-list] in.readLine() não retorna !!! Date: Sat, 09 Jun 2001 14:10:36 - Tenho um servidor Java que escuta numa porta via um ServerSocket e abre um Thread para cada requisição que ele recebe. Esse Thread recebe o socket e abre um BufferedReader (in) e um PrintStream (out) para se comunicar com o cliente. O problema é o seguinte: Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam. Já andei investigando e descobri que temos que usar socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket está vivo ou se o cliente desapareceu silenciosamente. (Como experiência, conecte duas máquinas via um socket e desligue o cabo de rede de uma delas. A outra vai ficar travada num in.readLine() eternamente se você não estiver usando o KeepAlive!) Tb temos que setar o parametro KeepAliveTime no registry do windows, que o intervalo em milisegundos que o Windows vai dar um ping no Socket para saber se ele ainda está vivo. Se esse parametro não estiver presente no Registry, ele assume como default 2 horas! O problema é que mesmo fazendo esse esquema do KeepAliveTime, estou desconfiado que alguns threads continuam travados para sempre no in.readLine(), o que está fazendo com que o meu servidor trave uma vez a cada duas semanas por excesso de threads! Alguém já passou por problema semelhante? Tem como forçar um retorno de um in.readLine() travado ? Se tiver acho então que a solução poderia ser um thread monitor para matar os threads que estão travados a muito tempo. []'s Sergio Oliveira Jr. Sun Cerfied Java Programmer Consultor Java _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED
Re: [java-list] in.readLine() não retorna !!!
Sergio, não sei o que você está construindo, mas você pode controlar isso através de múltiplas threads e vetores. O vetor mantém a lista de todos os clientes. Assim fazendo um loop e verificando os clientes no vetor com o try ... catch ... em um bloco sincronizado, obtemos uma Enumeration dos clientes a serem manipulados. A classe Enumeration provê um modo muito conveniente para avaliar cada elemento de um vetor. Um loop escreve a ensagem para cada elemento da Enumeration. Se alguma exceção ocorre ao enviar para o cliente então chamamos o o método stop() do cliente; isso para a thread do cliente e executa o cleanup apropriado, inclusive removendo o cliente do manipulador. Mais informações você obtém em: Java Network Programmo]ing - Merlin and Conrad Hughes, Michael Shoffner e Maria Winslow. - Editora Manning ISBN 0-13-841206-5 Rodolfo Ricci Petrolina PE -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
[java-list] in.readLine() não retorna !!!
Tenho um servidor Java que escuta numa porta via um ServerSocket e abre um Thread para cada requisição que ele recebe. Esse Thread recebe o socket e abre um BufferedReader (in) e um PrintStream (out) para se comunicar com o cliente. O problema é o seguinte: Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam. Já andei investigando e descobri que temos que usar socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket está vivo ou se o cliente desapareceu silenciosamente. (Como experiência, conecte duas máquinas via um socket e desligue o cabo de rede de uma delas. A outra vai ficar travada num in.readLine() eternamente se você não estiver usando o KeepAlive!) Tb temos que setar o parametro KeepAliveTime no registry do windows, que o intervalo em milisegundos que o Windows vai dar um ping no Socket para saber se ele ainda está vivo. Se esse parametro não estiver presente no Registry, ele assume como default 2 horas! O problema é que mesmo fazendo esse esquema do KeepAliveTime, estou desconfiado que alguns threads continuam travados para sempre no in.readLine(), o que está fazendo com que o meu servidor trave uma vez a cada duas semanas por excesso de threads! Alguém já passou por problema semelhante? Tem como forçar um retorno de um in.readLine() travado ? Se tiver acho então que a solução poderia ser um thread monitor para matar os threads que estão travados a muito tempo. []'s Sergio Oliveira Jr. Sun Cerfied Java Programmer Consultor Java _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -
Re: [java-list] in.readLine() não retorna !!!
Acho que a resposta estava na minha frente e eu não vi: socket.setSoTimeout(). Vou testar e ver se funciona! []'s Sergio From: Sergio Oliveira Jr. [EMAIL PROTECTED] Reply-To: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Subject: [java-list] in.readLine() não retorna !!! Date: Sat, 09 Jun 2001 14:10:36 - Tenho um servidor Java que escuta numa porta via um ServerSocket e abre um Thread para cada requisição que ele recebe. Esse Thread recebe o socket e abre um BufferedReader (in) e um PrintStream (out) para se comunicar com o cliente. O problema é o seguinte: Alguns in.readLine() fica bloqueados para sempre, ou seja, nunca retornam. Já andei investigando e descobri que temos que usar socket.setKeepAlive(true), para o TCPIP checar periodicamente se o socket está vivo ou se o cliente desapareceu silenciosamente. (Como experiência, conecte duas máquinas via um socket e desligue o cabo de rede de uma delas. A outra vai ficar travada num in.readLine() eternamente se você não estiver usando o KeepAlive!) Tb temos que setar o parametro KeepAliveTime no registry do windows, que o intervalo em milisegundos que o Windows vai dar um ping no Socket para saber se ele ainda está vivo. Se esse parametro não estiver presente no Registry, ele assume como default 2 horas! O problema é que mesmo fazendo esse esquema do KeepAliveTime, estou desconfiado que alguns threads continuam travados para sempre no in.readLine(), o que está fazendo com que o meu servidor trave uma vez a cada duas semanas por excesso de threads! Alguém já passou por problema semelhante? Tem como forçar um retorno de um in.readLine() travado ? Se tiver acho então que a solução poderia ser um thread monitor para matar os threads que estão travados a muito tempo. []'s Sergio Oliveira Jr. Sun Cerfied Java Programmer Consultor Java _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] - _ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. -- LISTA SOUJAVA http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm para sair da lista: envie email para [EMAIL PROTECTED] -