Olá pessoal!
estou desenvolvendo uma aplicação Cliente-Servidor que usa comunicação via bluetooth. Preciso de dois celulares conectados a um PC. O problema é que só consigo a conexão de um cliente com o servidor por vez. Tem como conectar mais de um cliente com o servidor ao mesmo tempo?
Estou usando o protocolo RFCOMM. Na documentação JSR-82 diz que:
“The SPP service can accept multiple connections from different clients by calling acceptAndOpen()”. Tentei fazer isso mas ocorre o erro: BluetoothConnectionException: timeout. Eu na verdade só consigo conectar o segundo cliente quando qualquer o primeiro desconecta.
Segue trecho do código:
boolean listening = true;
boolean firstTime = true;
String cmd = “”;
while (true) {
System.err.println(“Listening…”);
try {
if (listening) {
System.err.println(“Aguardando Conexão 1!”);
conn1 = (StreamConnection) server.acceptAndOpen();
/--------- Client Connected waiting for incoming data –/
din1 = new DataInputStream(conn.openInputStream());
dout1 = new DataOutputStream(conn.openOutputStream());
listening = false;
firstTime = false;
System.err.println(“Cliente 1 conectado…”);
System.err.println(“Aguardando Conexão 2!”);
conn2 = (StreamConnection) server.acceptAndOpen();
din2 = new DataInputStream(conn2.openInputStream());
dout2 = new DataOutputStream(conn2.openOutputStream());
Sim, to usando windows XP e o driver bluesoleil 2.3, o meu dongle-USB é um multilaser AV00018ML.
Se alguém tiver ai um exemplo com mais de um cliente por favor mande!!!
Ajudem!!!
abraços,
Leydson
porque vc faz dois acceptAndOpen ?
vai travar mesmo…
depois do acceptAndOpen, crie uma Thread, e passe a conexão deste cliente para ela… e a thread faz o que tem que fazer com a inputstream/outputstream…
e depois disso você lê novamente o acceptAndOpen
Alterei o código da seguinte maneira:
while (true) {
System.err.println(“Listening…”);
try {
if (listening) {
System.err.println("Aguardando Conexões! "+clientsConnected);
conn = (StreamConnection) server.acceptAndOpen();
/--------- Client Connected waiting for incoming data –/
System.err.println(“Cliente conectado…”);
tratadores[clientsConnected] = new Thread(new TratadorDeConexao(conn, clientsConnected));
tratadores[clientsConnected].start();
clientsConnected++;
onde tratadores é um objeto da Classe TratadorDeConexao (implements Runnable), cujo código segue abaixo:
package systemBluetooth;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.io.StreamConnection;
import java.io.IOException;
/**
*
-
@author Administrador
*/
public class TratadorDeConexao implements Runnable {
StreamConnection connection;
DataInputStream din;
DataOutputStream dout;
int cliente;
public TratadorDeConexao(StreamConnection conn, int cliente){
connection = conn;
din = null;
dout = null;
this.cliente = cliente;
}
public void run(){
try{
din = new DataInputStream(connection.openDataInputStream());
dout = new DataOutputStream(connection.openDataOutputStream());
}catch(IOException ioe){
System.err.println("Exceção ao capturar streams do cliente"+cliente);
}
while(true){
System.err.println("Executando um cliente "+cliente);
try{
Thread.sleep(60000);
}catch(InterruptedException ie){
System.err.println("Exceção ao tentar dormir!");
}
}
}
}
Quando conecto o primeiro cliente a saída apresentada é:
Inicializando Bluetooth
BlueCove version 2.1.0 on bluesoleil
Listening…
Aguardando Conexões! 0
Cliente conectado…
Listening…
Aguardando Conexões! 1
Executando um cliente 0
Executando um cliente 0
Executando um cliente 0
…
então faço uma busca com o outro dispositivo/celular e o mesmo encontra o servidor(o que acontecia com meu programa inicial), mas quando tenta conectar é disparada a exceção BluetoothConnectionException: timeout.
Ou seja, continua dando o mesmo erro…
No site da revista Mundo Java tem o código fonte do que vc quer, tá aí o link da edição 30 da revista http://www.mundojava.com.br/NovoSite/30codigos.shtml. Para entender melhor esse código aconselho comprar a revista.
Rapaz,
baixei a aplicação, compilei pelo netBeans com as bibliotecas que vem no projeto, executei o servidor de desktop e executei o cliente em dois celulares, consegui conectar o primeiro normalmente, enviei mensagem e tudo, mas quando tento conectar o segundo cliente dá um erro (aparece mensagem Erro! no celular ou Device not reachable!), e somente quando desconecto o primeiro cliente é que consigo conectar o segundo cliente… :s
Alguém testou esta aplicação? Se sim e se deu certo me fala a configuração do ambiente: windows vista, XP, linux … qual o dongle usb que tá usando e etc…
Teoricamente acho que meu servidor deveria funcionar normalmente aceitando várias conexões.
vlw!!