質問
私はMIDP 2.0とCLDC 1.1を使用してモバイルデバイス上で動作するTCPクライアントを開発しようとしています。私はいくつかのサンプルコードをしようとしています、と私は次のような問題があります:
私は(MIDletのから)データバックを読みしようとしたとき、私は奇妙な例外を取得ます。
これは私のコードです:
//Wait for an incoming message
firstByte = in.read();
ByteArrayOutputStream textRecieved = new ByteArrayOutputStream(); //Will be used to hold the data
if (firstByte >= 0 )
{
int messageSize = this.in.available();
//Read the message
while (messageSize > 0)
{
byte[] buffer = new byte[messageSize];
this.in.read(buffer);
textRecieved.write(buffer);
messageSize = this.in.available(); //Just in case the server sent the request in chunks.
System.out.println("Reading...");
}
}
textRecieved.close();
これは私が取得例外ではあります:
java.io.IOException: Unknown error 10053 during socket::read at com.sun.midp.io.j2me.socket.Protocol.read0(), bci=0 at com.sun.midp.io.j2me.socket.Protocol.nonBufferedRead(), bci=12 at com.sun.midp.io.BufferedConnectionAdapter.readBytes(), bci=36 at com.sun.midp.io.BaseInputStream.read(), bci=227 at com.sun.midp.io.BufferedInputStream.fill(), bci=172 at com.sun.midp.io.BufferedInputStream.read(), bci=16 at hello.Client.run22222(Client.java:60) at hello.HelloMIDlet.startApp(HelloMIDlet.java:193) at javax.microedition.midlet.MIDletTunnelImpl.callStartApp(), bci=1 at com.sun.midp.midlet.MIDletPeer.startApp(), bci=7 at com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=269 at com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52 at com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8 at com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161 at com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26
は、例外が発生し行はこれです
firstByte = in.read();
私は別のスレッドで読んでいます。私が要求を送信し、同じサーバーを使用してそれらを読み取ろうとしたとき、私は同じエラーを経験しました。サーバーは、単純なエコーサーバ、複雑なものではあります。
P.S。私は道のコードはC#のようなルックスを書かれていることを知っているが、それはJavaのですが、私はそれが簡単に読み、この方法に従うことを見つけます。
感謝します。
解決 2
この例では、動作しているようです。 ます。http://www.java-samples。 COM / J2ME /ソケット接続-自由J2ME-サンプルprogram.htmする
それは、問題は、私はミッドレットによって呼び出されるクラスとしてクライアントを実装したことだったことだろうか?
他のヒント
私が見る最初の事はあなたがしているavailable()
を誤使用していることです。それは最も可能性の高いのいないのあなたはそれがない願っています何ます。
これは、このストリーム内のすべてのデータを保持することを目的バッファを確保するために、このメソッドの戻り値を使用するのが正しいことはありません。
これは非常によくちょうど、0
を返すことができますがサイズ0のバッファを割り当て、その場合には、その内に読み込ましてみてください。