1

をストリーミングしようとしていますObjectOutputが、上記のエラーが発生します。

コード:

private void writelogin(int i, int j, int k, int c4, int l, int m, Socket sock) throws IOException, InterruptedException {
    ObjectOutputStream dos = new ObjectOutputStream((OutputStream)sock.getOutputStream());
    boolean data = true;
    int[] btw = new int[]{i,j, k, c4, l, m};

    do {
        ((ObjectOutput) dos).writeObject(btw);
            data=false;
        } while (data);
            dos.flush();
            dos.close();}}

理由はわかりません。

例外は outet via System.outnot viaErrorlogです。

サーバーが受け取るもの: AC ED (多くの 00 やその他の 16 進数の「乱数のように見える」数字が表示される場合があります)

私のストリームが送信しなければならないもの: 03 96 144 54 79 05

サーバーが受信する必要があるもの: 03 60 90 36 4F 05

16 進数が許可されていることは正しいので、問題ではありません。

ObjectOutputStream私はと を使用しているので、問題はあります。すべてのブロック自体をArray使用して配置すると、正常に機能しました。DataOutputStreamdos.writeByte(i);dos.writeByte(j);

何か新しいことを考え出した:私は自分でObjectOutputStream送信しAC ED 00 05ます...誰もそれを回避する方法を知っていますか? 私は何も送っていませんが、彼は送っています。

もう問題ではありません。回避する方法を見つけました。経由DataOutputStreamで配列を送信することさえ可能であることがわかったので、これは回避されます。

4

2 に答える 2

1

いずれかが必要になるたびにどちらか一方を作成するのではなく、ソケットの存続期間中、両端で同じ ObjectInputStream および ObjectOutputStream を使用する必要があります。

于 2013-02-01T11:13:28.080 に答える
0

次のコードは怪しいと思われます:

((ObjectOutput) dos).writeObject(btw);

試してみるだけで、

dos.writeObject(btw);

なぜあなたは型キャストしていて、それも ObjectOutput にしていますか?

new編集:配列の初​​期化を忘れていると思います。

int[] btw = new int[]{i,j, k, c4, l, m};
于 2013-02-01T08:22:46.147 に答える