Server java

Boa tarde pessoal estou precisando de uma ajuda estou desenvolvendo um pequeno server em Java e preciso fazer com que ele aceite várias conexões simultâneas. No momento consigo realizar apenas uma conexão por vez segue o código da parte do cliente e da parte do server:

public class Cliente {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	
	
    try {

        Socket conexaoServer = new Socket("127.0.0.1",12345);//tenta conectar-se a um ip em determinada porta
        System.out.println("Conexão estabelecida!");
        Scanner teclado = new Scanner(System.in);//cria uma variavel escanner para ler do teclado
        PrintStream saidaCliente = new PrintStream(conexaoServer.getOutputStream());
        
        
        //botei aqui
        InputStream FluxoDeDadosServidor = conexaoServer.getInputStream();//pega o fluxo de dados advindo do servidor
        Scanner lerDoSocketServidor = new Scanner(FluxoDeDadosServidor);
        
        while(teclado.hasNextLine()){
            
            saidaCliente.println(teclado.nextLine());//escreve no socket servido o fluxo de dados avindo do teclado
            System.out.println(lerDoSocketServidor.nextLine());//printa no console os dados advindos do servidor
            
            
        }
    	
    } catch (UnknownHostException  ex) {
        ex.printStackTrace();
    }catch (IOException ex) {
        ex.printStackTrace();
    }
}

}

##############################Server###########################################

public static void main(String[] args) {
	// TODO Auto-generated method stub
	try {
		
        System.out.println("Recebendo Oferenda...");
        ServerSocket servidor = new ServerSocket(12345);//cria um Sockte de servidor
        Socket cliente = servidor.accept();// aceita a conexão de um cliente
        System.out.println("Cliente: " + cliente.getInetAddress().getHostAddress() + " conectado");//pega o endereço Ip do cliente
        
       
        
        InputStream fluxoDeDadosCliente =cliente.getInputStream();//pega o fluxo de dados vindos dos clientes
        
        Scanner lerDoSocketCliente = new Scanner(fluxoDeDadosCliente);//cria uma variavel de sanner que tem como entrada os dados vindos do cliente
      
        PrintStream saidaServidor = new PrintStream(cliente.getOutputStream());//cria uma variavel de printStream que envia um fluxo de dados para o cliente
        Scanner teclado = new Scanner(System.in);//pega a entrada de dados do teclado do cliente
        while(lerDoSocketCliente.hasNextLine()){//enquanto haver dados no fluxo do cliente
            System.out.println(lerDoSocketCliente.nextLine());//printa  fluxo do cliente
            saidaServidor.println(teclado.nextLine());//escreve no cliente
        }
		
        
        
    } catch (IOException ex) {
        
        System.out.println("Erro na criação do servidor");        
    }
}

}

Estude a API de threads do Java, isso é um exemplo de aplicação típica de threads.

Para poder aceitar multiplas conexões modifique o codigo do lado do servidor para esse:

public static void main(String[] args) {

    

    try {   

        System.out.println("Recebendo Oferenda...");

        while(true){

            ServerSocket servidor = new ServerSocket(12345);//cria um Sockte de servidor

            Socket cliente = servidor.accept();// aceita a conexão de um cliente

            Thread t = new Thread(){

                public void run(){

                    System.out.println("Cliente: " + cliente.getInetAddress().getHostAddress() + " conectado");//pega o endereço Ip do cliente

                

                    InputStream fluxoDeDadosCliente =cliente.getInputStream();//pega o fluxo de dados vindos dos clientes

                

                    Scanner lerDoSocketCliente = new Scanner(fluxoDeDadosCliente);//cria uma variavel de sanner que tem como entrada os dados vindos do cliente

            

                    PrintStream saidaServidor = new PrintStream(cliente.getOutputStream());//cria uma variavel de printStream que envia um fluxo de dados para o cliente

                    Scanner teclado = new Scanner(System.in);//pega a entrada de dados do teclado do cliente

                    while(lerDoSocketCliente.hasNextLine()){//enquanto haver dados no fluxo do cliente

                        System.out.println(lerDoSocketCliente.nextLine());//printa  fluxo do cliente

                        saidaServidor.println(teclado.nextLine());//escreve no cliente

                    }

                }

            }

            t.start();

        }

    } catch (IOException ex) {

        System.out.println("Erro na criação do servidor");        

    }

}
1 curtida