現在、ネットワーク上の別の TCP ベースのデバイスに生データを簡単に送受信するためのアプリを Blackberry で作成しています。MDS シミュレーターを実行し、会社の MDS サーバーと通信する物理電話を使用している Blackberry シミュレーターでも同じ問題が発生しています。この問題は、MDS 経由ではなく Wi-Fi を直接使用する場合には発生しないことに注意してください。
問題は、最初に read() を呼び出さない限り、InputStream の available() 関数がゼロを返すことです。最初に read を呼び出すと (使用可能なデータがあることを知って..wireshark に感謝します)、データが返され、その後に available() を呼び出すと、読み取れなかったデータが残っていることが示されます。問題は、データが存在することが常に保証されるとは限らないため、ブロックされる可能性があることです。誰かがこれを認識していますか?これは問題ですか、それとも設計上のものですか?
read() メソッドが available とは別に呼び出す前にブロックされるかどうかをテストする方法を知っている人はいますか?
これが基本的に私がやっていることです:
SocketConnection s = (SocketConnection)Connector.open("socket://1.2.3.4:port;deviceside=false", Connector.READ_WRITE); OutputStream o = ((StreamConnection)s).openOutputStream(); InputStream i = ((StreamConnection)s).openInputStream(); o.write("こんにちは"); Thread.sleep(いつか); if (i.available() > 0) { バイト[] データ = 新しいデータ[10]; int bytesRead = i.read(データ); System.out.println("Read [" + new String(data) + "] (bytes = " + bytesRead + ")"); }
これが機能するには、条件付きの if をコメントアウトする必要があります。