Fazer o server continuar ouvindo por conexões

Oi!
Estou tentando criar um servidor que deve aceitar uma conexão e continuar ouvindo após a conexão ser fechada, porém não ando tendo progresso em relação a isso. O servidor apenas aceita o primeiro pedido de conexão e não aceita mais conexões. Aqui está o código que fica ouvindo por conexões:

serverSocket = new ServerSocket(Integer.parseInt(SERVER_PORT));
       clientSocket = serverSocket.accept();
       
       System.out.println("Chegou alguém aqui!");
       //in recebe mensagens
       in = new ObjectInputStream(clientSocket.getInputStream());  
       Roteador inputLine;
       while(true) {
           if((inputLine = (Roteador) in.readObject()) != null){
            System.out.println("E esse alguém tem o nome: "+inputLine.getName()+"\nE a tabela: "+inputLine.getTabela().toString());
           } else {
               System.out.println("Bye bye!");
           }
       }

Suponha que eu crie 3 instâncias diferentes do mesmo código, cada instância com sua própria porta de servidor.

Se X envia para Y, Y recebe a conexão. Porém se Z enviar algo para Y, Y não irá reconhecer o pedido de conexão.

Achei que o problema podia estar em deixar o clientSocket.accept() fora do while(true), mas não mudou em nada depois que coloquei.

Agradeço a ajuda desde já,
Daniel.

HA!
Descobri qual era o erro. Pelo visto eu devia abrir o InputStream a cada nova conexão! :slight_smile:

O código atualizado é o seguinte:

       serverSocket = new ServerSocket(Integer.parseInt(SERVER_PORT));
       clientSocket = serverSocket.accept();
       
       System.out.println("Chegou alguém aqui!");
       Roteador inputLine;
       while(true) {
           //in recebe mensagens
           in = new ObjectInputStream(clientSocket.getInputStream());  
           if((inputLine = (Roteador) in.readObject()) != null){
            System.out.println("E esse alguém tem o nome: "+inputLine.getName()+"\nE a tabela: "+inputLine.getTabela().toString());
           }
           clientSocket = serverSocket.accept();
       }

Talvez essa solução seja útil para alguém!

1 curtida

vc pode fazer isso no proprio while

while ( ( clientSocket = serverSocket.accept() ) != null ) {
   ...
  clientSocket.close();
}