0

BT を使用して PC と android 間の通信を実装するときに問題が発生しました。標準のJavaソケットとそのストリームを使用して、WIFI通信で正しく動作するアプリケーションがあります。Bt通信を追加しようとしています。ストリームを開くための Android 側のコードは、標準の BluetoothSocket を使用します (通信が確立され、問題ありません)。

mOos = new ObjectOutputStream(btSocket.getOutputStream());
mOos.flush();
mOis = new ObjectInputStream(btSocket.getInputStream());

PC 側では Bluecove 2.1 を使用しています。

mOos = new ObjectOutputStream(mStreamConn.openOutputStream());
mOos .flush();
mOis = new ObjectInputStream(mStreamConn.openInputStream());

ストリームは適切に初期化されます。AndroidからPCに最初のメッセージを送信しています

protected synchronized void sendAwaitingMsg() throws IOException {
    Message msg;
    while((msg = mOutgoingMsgQueue.poll()) != null) {
        mOos.writeObject(msg);
    }
    mOos.flush();
}

そしてPC側で読み込んでみる

protected void getIncomingMsg() throws IOException, ClassNotFoundException {
    if(mOis.available() > 0) {
        Message msg = (Message)mOis.readObject();

        if(msg.mControlHeader > 0) {
            mKeepRunning = false;
        } else {
            msg.setHandlerId(mId);
            mConnectionManager.acceptNewMessage(msg);
        }
    }
}

ただし、mOis.available() は常に 0 であり、送信メッセージを受信しないことを意味します。私のメッセージ オブジェクト クラス:

public class Message extends LinkedHashMap implements Serializable, Comparable {
static final long serialVersionUID = 10275539472837495L;

protected long mHandlerId;
protected int mType;
protected int mPriority;
public int mControlHeader = 0;



public int getType() {
    return mType;
}

public void setType(int type) {
    this.mType = type;
}

public long getHandlerId() {
    return mHandlerId;
}

public void setHandlerId(long handlerId) {
    this.mHandlerId = handlerId;
}

public int getPriority() {
    return mPriority;
}

public void setPriority(int priority) {
    mPriority = priority;
}

@Override
public int compareTo(Object o) {
    return mPriority - ((Message)o).mPriority;
}

}

標準の Java ソケットでの同じ操作と、ネットワーク通信は魅力のように機能します。問題はどこだ?

4

1 に答える 1