Como colocar servidor a aceitar pedidos de clientes em portos diferentes?!

4 respostas
merlinX

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.

4 Respostas

T

Crie 2 threads, uma para receber as conexões da porta 1234, outra para receber as conexões da 4321.

merlinX

O problema é que não estou a ver como fazer isso…
Alguém que possa colocar exemplo de código.

Obrigado desde já.

merlinX

Resolvido!

A

como resolveu o problema ? o meu é exactamente o mesmo … queria o serversocket a escutar em duas portas diferentes, um para clientes e outra para administrador…
pode-me ajudar ?

Criado 8 de abril de 2009
Ultima resposta 5 de dez. de 2009
Respostas 4
Participantes 3