java - 发送包裹而不关闭时,出现错误

标签 java

当我尝试在游戏中发送有关玩家坐标的包而不关闭任何内容时,出现此错误:

java.io.StreamCorruptedException: invalid stream header: 74000632

当主机/客户端尝试发送包时会发生这种情况。另外,当我收到该错误时,它指向 ois = new ObjectInputStream(client.getInputStream()); 线该怎么办? (我只是很困惑,请帮忙)

托管代码:

static void hosting() throws IOException, ClassNotFoundException {
        ServerSocket hoster = new ServerSocket(9876);
        System.out.println("-1");
        Socket client = hoster.accept();
        System.out.println("-2");
        oos = new ObjectOutputStream(client.getOutputStream());
        while (true) {
            ois = new ObjectInputStream(client.getInputStream());
            String message = (String) ois.readObject();
            if (message.equals("Connected")) {
                game.add(otherPlayer);
                connected = true;
                continue;
            }
            otherX = Character.digit(message.charAt(0), 10);
            otherX *= 10;
            otherX += Character.digit(message.charAt(1), 10);
            otherX *= 10;
            otherX += Character.digit(message.charAt(2), 10);
            otherY = Character.digit(message.charAt(3), 10);
            otherY *= 10;
            otherY += Character.digit(message.charAt(4), 10);
            otherY *= 10;
            otherY += Character.digit(message.charAt(5), 10);
            otherPlayer.setBounds(otherX, otherY, 50, 50);
            oos.flush();
        }
    }

客户端代码:

static void client() throws IOException, ClassNotFoundException {
        Socket client = new Socket("127.0.0.1", 9876);
        oos = new ObjectOutputStream(client.getOutputStream());
        oos.writeObject("Connected");
        connected = true;
        game.add(otherPlayer);
        while (true) {
            ois = new ObjectInputStream(client.getInputStream());
            String message = (String) ois.readObject();
            otherX = Character.digit(message.charAt(0), 10);
            otherX *= 10;
            otherX += Character.digit(message.charAt(1), 10);
            otherX *= 10;
            otherX += Character.digit(message.charAt(2), 10);
            otherY = Character.digit(message.charAt(3), 10);
            otherY *= 10;
            otherY += Character.digit(message.charAt(4), 10);
            otherY *= 10;
            otherY += Character.digit(message.charAt(5), 10);
            otherPlayer.setBounds(otherX, otherY, 50, 50);
            oos.flush();
        }
    }

最佳答案

尝试输入 ois = new ObjectInputStream(client.getInputStream());跳出循环。

关于java - 发送包裹而不关闭时,出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466597/

相关文章:

java - 通过 JDBC 使用结果集插入新行

java - 单位转换程序 - 如何将变量从一种方法转换为另一种方法?

Java Jsoup 输出的格式不符合我想要的格式

java - 将java值插入sqlite数据库

JAVA Selenium chrome 驱动程序在页面仍在加载时不会滚动

java - 为什么不能扩展集合泛型类型

Java并发锁和条件使用

Java:制作初始 ArrayList 的本地副本的最快方法?

java - 从我的jsp表获取数据到我的spring Controller

java - JR报告不显示数据