out.println("PING"); socket.setSoTimeout(10000); 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 -0000 > > > > > > > >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. > >_________________________________________________________________________ >Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. _________________________________________________________________________ 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] -------------------------------------------------------------------------