Клиент связи bluetooth застрял j2me
Как я могу использовать один и тот же поток для чтения / записи с сервера на клиент или с клиента на сервер более одного раза?
Я делаю пошаговую игру через Bluetooth. Любые идеи о том, как этого добиться в j2me?
Я использую протокол RfCOM.
Код клиента
public void serviceSearchCompleted(int transID, int respCode) {
try {
StreamConnection SC = (StreamConnection) Connector.open(connectionURL);
input = SC.openDataInputStream();
output = SC.openDataOutputStream();
} catch (IOException ex) {
ex.printStackTrace();
}
while (true) {
f.setCommandListener(new CommandListener() {
public void commandAction(Command c, Displayable d) {
if (c.getLabel().toString().equalsIgnoreCase("send")) {
try {
output.writeUTF("Hey server");
output.flush();
String msg = input.readUTF();
System.out.println(msg);
} catch (IOException ex) {
ex.printStackTrace();
System.out.println("am here now " + ex);
}
}
}
});
synchronized (lock) {
lock.notify();
}
}
}
Код сервера:
while (true) {
StreamConnection sc = scn.acceptAndOpen();
RemoteDevice rd = RemoteDevice.getRemoteDevice(sc);
DataInputStream input = sc.openDataInputStream();
DataOutputStream output = sc.openDataOutputStream();
String inMsg = input.readUTF();
System.out.println(inMsg + " recived at " + new Date().toString());
output.writeUTF("Hey client Sent at " + new Date().toString());
output.flush();
}
Поток работает только один раз, тогда ничего не происходит, когда я нажимаю отправить снова
Processing CONN_INIT 4
Processing CONN_OPEN 4
Processing CONN_SEND 4
Processing CONN_RECEIVE 4
Hey client Sent at Sun Jul 22 19:47:15 GMT+02:00 2012
Processing CONN_SEND 4
Processing CONN_RECEIVE 4
1 ответ
L2CAPConnectionNotifier.acceptAndOpen
заблокирует цикл и будет ждать нового соединения.
Переместите ваш код из тела while в новый поток.
while (true) {
StreamConnection sc = scn.acceptAndOpen();
final RemoteDevice rd = RemoteDevice.getRemoteDevice(sc);
new Thread() {
public void run() {
treatConnection(rd);
}
}.start();
}
private void treatConnection(RemoteDevice rd) {
DataInputStream input = sc.openDataInputStream();
DataOutputStream output = sc.openDataOutputStream();
String inMsg = input.readUTF();
while (inMsg != null) { // not sure about this stop condition...
System.out.println(inMsg + " recived at " + new Date().toString());
output.writeUTF("Hey client Sent at " + new Date().toString());
output.flush();
inMsg = input.readUTF();
}
}