蓝牙通信服务器客户端卡住j2me

时间:2012-07-22 17:51:44

标签: java-me bluetooth midp jsr82

如何使用相同的Stream多次从服务器到客户端或从客户端到服务器进行读/写?

我正在通过蓝牙进行回合制游戏。关于如何在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 个答案:

答案 0 :(得分: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();
    }
}
相关问题