Olá a todos!
Estou fazendo um projeto em que o Computador implementa um sistema que irá oferecer serviços para o usuário do telefone.
Eu implementei um servidor utilizando a biblioteca bluecove no linux.
Consegui fazer conexão entre o celular e o computador, agora quando conecto 2 celulares e quero que um terceiro celular se conecte ele não consegui de jeito nenhum.
Procurei na documentação e vi que tinha um comando para ver a quantidade de dispositivos que podem ser conectados simultaneamente (não me lembro agora o nome do comando), e vi que poderia conectar 7 dispositivos
Segue abaixo a parte de conexão:
private void gerenciar() throws IOException, ExceptionFluxoEntrada, ExceptionFluxoSaida, FluxoClienteJaGerado, SQLException, ClassNotFoundException {
StreamConnection conexaoCliente = null;
while(this.isEstaConectado()){
/*Aguarda por Conexões*/
conexaoCliente = this.conexao.acceptAndOpen();
System.out.println("Conectou:\n");
/*Cria um GerenciadorCliente para manipular a conexão do cliente*/
ConjuntoCliente gerenciador = new ConjuntoCliente(conexaoCliente);
gerenciador.iniciarCliente();
}
}
Tenho um sistema aqui na empresa que se conecta com N celulares e esta sobre a BlueCove tambem com linux (Fedora, Slackware) e windows XP e Vista.
Então o problema de mais de 2 conexões é no seu código.
Agora estou confuso, esse tópico é j2me? rs…
Abraços
Ricoldi
Então como seria a forma certa de fazer com que o servidor espere conexões do cliente?!
desde já agradeço por ter respondido
abraço
Não sei se sabe, o código deve estar em processamento paralelo, para não esperar um cliente terminar e ai então voltar a esperar um cliente.
gerenciador.iniciarCliente(); //Aqui tem que startar um thread paralelo ao do while.
Não sei se você ja esta fazendo isso mas não li nada no seu outro post sobre isso, então optei por comentar (Vai que é o caso).
Porem se não for, avisa que amanha eu dou uma olhada no código que tenho e posto aqui para você ter uma ideia.
Abraços
Ricoldi
Ricoldi
Estou fazendo isto em uma outra classe desta forma
public class ConjuntoConexaoCliente{
private ConexaoCliente clientes;
/**
* Construtor da Classe
* @param StreamConnection - Conexão com o cliente que já foi feita
* @throws IOException
* */
public ConjuntoConexaoCliente(StreamConnection conexao) throws IOException, SQLException, ClassNotFoundException{
super();
this.clientes = new ConexaoCliente(conexao);
}
/**
* Metodo que inicia uma conexão de dados com o cliente
* @throws ExceptionFluxoEntrada
* @throws ExceptionFluxoSaida
* @throws FluxoClienteJaGerado
* @since 1.0
* */
public synchronized void iniciarCliente() throws ExceptionFluxoEntrada, ExceptionFluxoSaida, FluxoClienteJaGerado{
if(!this.clientes.isFluxoEstaGerado()){
this.clientes.gerarFluxos();
Thread t = new Thread (this.clientes);
t.start();
}else{
throw new FluxoClienteJaGerado();
}
}
}
O iniciarCliente gera uma nova thread para cada conexão de cliente, e this.clientes é uma classe que criei (ConexaoCliente). Esta implementa Runnable, e espera os pedidos do cliente!
Se você quiser depois eu coloco minha classe ConexaoCliente
abraço
Uma dica, evite ao máximo deixar acontecer uma exceção, vi que você esta chamando uma quando na verdade deve evitar que alguma ocorra utilizando outros métodos, visto que uma exceção tem que ocorrer quando para erros que o programador não imaginou. (Pelo que sei, devido ao alto custo para mudar a linha de execução). Não sei se fui claro.
Vocẽ ja depurou o projeto colocando um breakpoint na linha do “gerenciador.iniciarCliente();” procure rodar 1x e veja até onde vai a linha de excução, entrando em todas as classes que ela passar, e depois tente só processar na própria classe.
Só pelo que vi ainda não fui capaz de ter idéia do que esta acontecendo, mas seria bom você dar uma olhada no conceito de criação de servidores
Links:
http://planeta.terra.com.br/informatica/allegro/poo.zip
http://www.java2s.com/Code/Java/Tiny-Application/Simpleconsolemodecommandlinechatclient.htm
Qualquer coisa pergunte…
Abraços
Ricoldi
Este método “isEstaConectado()” que se encontra dentro do while vc criou??
Tem como posta o código?