android - 获取 StreamCorruptedException

标签 android sockets object client outputstream

我正在尝试流式传输 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();}}

我不知道为什么。

异常是通过 System.out 而不是通过 Errorlog 输出的。

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

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

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

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

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

发现了一些新东西:我的 ObjectOutputStream 自己发送了一个 AC ED 00 05 ......有谁知道如何避免这种情况?我什么都没寄,但他寄了。

没关系,找到解决方法。发现甚至可以通过 DataOutputStream 发送数组,因此避免了这种情况。

最佳答案

在套接字的生命周期中,您必须在两端使用相同的 ObjectInputStream 和 ObjectOutputStream,而不是每次需要其中之一时都创建一个或另一个。

关于android - 获取 StreamCorruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641883/

相关文章:

javascript - 如何从 JavaScript 中的变量值创建对象属性?

javascript - 通过输入字段创建循环的js对象

java - 您如何在Java中定义构造函数?

android - 带标签/标签的照片的云存储架构/解决方案

android - AudioRecord 启动后返回一些空数据

android - 如何为 Android x86 手机编译 Google stressapptest?

.net - 本地主机和127.0.0.1不一样吗?

android - 当使用 SwipeRefreshLayout 刷新 listView 时,我又得到了一个带有数据的 ListView

sockets - 什么是n个文件描述符,之后最好通过轮询切换到epoll?

java - 如何使用 Apache HttpComponents 从 Java Socket 获取 HTTPRequest