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 viaSystem.out不是 via Errorlog

我的服务器收到的内容: AC ED(有时很多 00 和其他六边形“看似随机”的数字)

我的 Stream 必须发送的内容: 03 96 144 54 79 05

我的服务器必须接收的内容: 03 60 90 36 4F 05

允许十六进制数字是正确的,所以不是问题。

问题就在那里,因为我使用ObjectOutputStreamand an Array,因为我使用DataOutputStream并通过它放置每个块本身dos.writeByte(i);dos.writeByte(j);工作正常。

想出了一些新的东西:我自己ObjectOutputStream发送了一个AC ED 00 05……有人知道如何避免这种情况吗?我什么都不送,但他送。

没关系,找到解决方法。发现甚至可以通过 Array 发送一个数组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 回答