質問

私は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()を誤使用していることです。それは最も可能性の高いのいないのあなたはそれがない願っています何ます。

available()は、推定値を返します

:そのJavadocは、明示的にこれを述べることになります
  

これは、このストリーム内のすべてのデータを保持することを目的バッファを確保するために、このメソッドの戻り値を使用するのが正しいことはありません。

これは非常によくちょうど、0を返すことができますがサイズ0のバッファを割り当て、その場合には、その内に読み込ましてみてください。

ただ、すぐに戻っていない何かを読んで、しかし、あなたは簡単にそれとより少なくより完璧な実装のバグを引き起こす可能性がなければならない準拠した実装では、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top