[RESOLVIDO] Como fazer para o Server Socket voltar para Listen?

Ola,

Eu tenho um Servidor Socket new ServerSocket(porta) e um cliente socket `new Socket(host,porta)

O que eu devo fazer quando a conexao do cliente cair?? Ou seja, eu queria que o meu Server Socket ficasse em Listen novamente, esperando requisicoes…

Quando eu tento conectar novamente acontece:

java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:516)
at java.net.Socket.connect(Socket.java:466)
at java.net.Socket.<init>(Socket.java:366)
at java.net.Socket.<init>(Socket.java:179)

Estive olhando na documentacao e parece que existem outros dois construtores, um que recebe um parametro backlog e outro dois parametros, o backlog e outro InteAddress. Por acaso alguem ja usou?? Parece que o InetAddress talvez resolvesse o meu problema certo??

Documentacao Server Socket
http://java.sun.com/j2se/1.3/docs/api/java/net/ServerSocket.html#ServerSocket(int,%20int)

Vlw, Andre

PS: desculpe a falta de pontuacao :shock:

eu acho que pode fazer assim

while(true){
try{
Socket socket = server.accept();
//faz oque quiser
}catch(SocketException e){continue;}//da um loop e espera conecta
}

Apesar que acho mais façil criar uma Thread e cuidar das conexões dai você deixa algo assim

while(true)
new ServerThread(server.accept()).start();

e isso permite mais de uma conexão ao mesmo tempo

Ola,

Eu ja to usando Threads para iniciar a conexao, so preciso dar uma olhada aqui quando reinicia-las… vou dar uma olhada naquilo que vc falou tb…

Vlw, Andre :smiley:

Ola,

Acho que consegui resolver aqui (precisa testar no ambiente agora hehe)

Antes eu tava fazendo assim (no Handler que trata da comunicacao do Cliente)

[code]bytesRead = -1;

try {
if (this.inputStream.available() &gt 0) {
bytesRead = this.inputStream.read(message);

if (log.isDebugEnabled()) {
  log.debug(&quot;Read &quot; + bytesRead + &quot; bytes from Cliente&quot;);
} 							

}
else {
Thread.yield();
Thread.sleep(1L);
}
}
[/code]

Agora eu to fazendo assim:

[code]bytesRead = -1;

try {
bytesRead = this.inputStream.read(message);

if (log.isDebugEnabled()) {
  log.debug(&quot;Read &quot; + bytesRead + &quot; bytes from Cliente&quot;);
} 							

if (bytesRead == -1) throw new SocketException(&quot;Comunicacao com o Cliente caiu!!&quot;);

}
[/code]

:smiley: