Boa noite pessoal, sou novo aqui no fórum.
Bem gostaria que alguém me ajudasse aqui com um problema que estou a ter no desenvolvimento de um projecto em java.
Trata-se do seguinte:
Tenho um sistema cliente-servidor em que o servidor tanto pode receber pedidos de clientes "normais" num determinado porto ex:1234 e outros clientes "especiais" no porto por ex: 4321, abaixo está um excerto do código com 2 ServerSocket's criados um para cada porto.
PORTOCLIENTES = 1234;
PORTOMANAGER=4321;
serverSocketForClient =
new ServerSocket(new Integer(this.configuracoes.getProperty("PORTOCLIENTES")));
System.out.println("ServerSocket criado para ElectionClient's, porto: "
+ this.configuracoes.getProperty("PORTOCLIENTES"));
serverSocketForManager =
new ServerSocket(new Integer(this.configuracoes.getProperty("PORTOMANAGER")));
System.out.println("ServerSocket criado para ElectionManager, porto: "
+ this.configuracoes.getProperty("PORTOMANAGER"));
Ora o problema vem depois para aceitar os respectivos clientes em diferentes portos sendo que tenho multi-threading para os clientes no porto 1234.
Pois o método accept bloqueia à espera do cliente neste caso sobre o cliente no porto 1234.
Como é que consigo aceitar ligação e respectivos pedidos de um cliente no porto 4321 sem ter que esperar que um cliente no porto 1234 se ligue?
Um excerto do código problemático:
while(true) {
System.out.println("Esperando um ElectionClient...");
//ElectionClient - o cliente no porto 1234 que requer multi-threading.
Socket socketConectadaCliente = serverSocketForClient.accept();
//O PROBLEMA:
//está bloqueado à espera de cliente para porto 1234, como aceitar o outro cliente no porto 4321 sem
//ter que esperar que este no porto 1234 seja aceite (se ligue)???
System.out.println("Esperando um ElectionManager...");
//ElectionManager - o cliente no porto 4321
Socket socketConectadaManager = serverSocketForManager.accept();
System.out.println("ElectionClient conectado.");
//criar e iniciar a thread para este ElectionClient
ServerThread novaThreadServidor = new ServerThread(socketConectadaCliente);
novaThreadServidor.start();
System.out.println("Thread " + novaThreadServidor.toString() +
" criada e a correr socket conectada");
}
Uma nota o outro tipo de cliente (manager) que está sobre o porto 4321 não necessita de multi-threading
Agradecia muito a vossa ajuda pois estou parado neste ponto e preciso avançar no projecto, no entanto não estou a conseguir ver como resolver esta situação chata.
Desde já obrigado.