0

私の現在の状況はかなり有線です。一方のAndroidアプリでネットワークスレッドを使用してサービスを実行しています。

反対側では、私のラップトップ(win8)で実行されているJavaアプリケーション。Javaアプリはサーバーソケットでリッスンしており、Androidアプリがそれと通信するのを待っています。Androidアプリがソケットを作成して正しいポートにバインドし、Javaアプリでサーバーソケットをアドレス指定したら、それを受け入れて新しいソケットを作成します。

この新しいソケットは、Androidアプリ(クライアント)からのパケットを待機しています。Androidアプリは、シリアル化可能なオブジェクトを送信します。

問題は、Javaアプリがそれを読み取らないことですが、wiresharkでスニッフィングし、パケットが受信されています。

だから私はバイト配列を読み取ろうとしましたが、うまくいきました。ソケットは問題なくそれを読み取りました。

これについて何か推測が起こっていますか?私のコードは良いと思います、それはかなり基本的なものです、そして私はアンドロイドアプリの間でそれを数回しました、なぜ今機能していないのか分かりません。

サーバー(Javaアプリ)

mServerSocket = new ServerSocket(port);

        mReceivedSocket = new Socket();

        mReceivedSocket = mServerSocket.accept();

        System.out.println("Accepted");

        mInput = new ObjectInputStream(mReceivedSocket.getInputStream());

        mOutput = new ObjectOutputStream(mReceivedSocket.getOutputStream());

        byte[] buf = new byte[4096];

        while (mReceivedSocket.isConnected()) {

            System.out.println("Waiting for packets");

            mInput.read(buf, 0, 4096);

            //NotificationPacket packet = (NotificationPacket) mInput.readObject();

            System.out.println("Packet received: "+buf.toString());

            //renderPacket(packet);

        }

クライアント送信(Androidアプリ)

mOutput.writeObject(packet);

        mOutput.flush();

シリアル化可能なパケットは、両側で同じです。

ありがとう。

4

1 に答える 1

1

ObjectInputStreamの前の両端でObjectOutputStreamを構築する必要があります。そうしないと、デッドロックが発生する可能性があります。また、両端でオブジェクトを読み取る必要があります。オブジェクトを書き込んでいますが、バイト配列を読み込んでいます。それは意味がありません。

于 2013-03-15T23:57:32.933 に答える