Servidor Java + Bluetooth só permite duas conexões?
6 respostas
sethbra
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:
privatevoidgerenciar()throwsIOException,ExceptionFluxoEntrada,ExceptionFluxoSaida,FluxoClienteJaGerado,SQLException,ClassNotFoundException{StreamConnectionconexaoCliente=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*/ConjuntoClientegerenciador=newConjuntoCliente(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
sethbra
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
ricoldi
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
sethbra
Ricoldi
Estou fazendo isto em uma outra classe desta forma
publicclassConjuntoConexaoCliente{privateConexaoClienteclientes;/** * Construtor da Classe * @param StreamConnection - Conexão com o cliente que já foi feita * @throws IOException * */publicConjuntoConexaoCliente(StreamConnectionconexao)throwsIOException,SQLException,ClassNotFoundException{super();this.clientes=newConexaoCliente(conexao);}/** * Metodo que inicia uma conexão de dados com o cliente * @throws ExceptionFluxoEntrada * @throws ExceptionFluxoSaida * @throws FluxoClienteJaGerado * @since 1.0 * */publicsynchronizedvoidiniciarCliente()throwsExceptionFluxoEntrada,ExceptionFluxoSaida,FluxoClienteJaGerado{if(!this.clientes.isFluxoEstaGerado()){this.clientes.gerarFluxos();Threadt=newThread(this.clientes);t.start();}else{thrownewFluxoClienteJaGerado();}}}
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
ricoldi
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