java - 服务器客户端应用程序的 StreamCorruptedException

标签 java sockets inputstream outputstream

我的服务器在线程中运行此代码,以便我可以在等待客户端连接时与 GUI 交互。(目前我只使用 1 个客户端和 1 个服务器。)

@Override
public void run() {

    Socket client = null;
    MessageListener listener = null;

    try {
        client = server.accept();
        oos = new ObjectOutputStream(client.getOutputStream());
        ois = new ObjectInputStream(client.getInputStream());
        listener = new MessageListener(ois);
        (new Thread(listener)).start();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

我的客户端运行此代码一次以连接到服务器并修复输入/输出流:

try {
        ois = new ObjectInputStream(server.getInputStream());
        MessageListener listener = new MessageListener(ois);
        oos = new ObjectOutputStream(server.getOutputStream());
        (new Thread(listener)).start();
    } catch (IOException e) {
        e.printStackTrace();
    }

MessageListener 运行一个线程来检查传入的消息。

@Override
public void run() {
    while (true) {
        Message message = null;
        try {
            message = (Message) in.readObject();
            if (message != null) {
                System.out.println(message.getName());
            }
        } catch (ClassNotFoundException | IOException e) {
            e.printStackTrace();
        }

    }
}

但是,当我启动程序时,首先我只能从服务器发送到客户端,而不是相反(我只是无法与客户端 GUI 交互)。 当我从服务器向客户端发送第一条消息后,我收到以下错误消息:

java.io.StreamCorruptedException: invalid type code: 6F
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.jale.chat.iohandling.MessageListener.run(MessageListener.java:25)
at java.lang.Thread.run(Unknown Source)

编辑:在我收到第一条错误消息后,我只能从客户端发送到服务器(发送实际上有效),但错误消息不断向我的控制台发送垃圾邮件。

MessageListener第25行:

message = (Message) in.readObject();

在 google/Stack Overflow 上没有找到任何内容,因为获取 StreamCorruptedException 时的一般问题似乎是当人们打开多个 InputStreamsOutputStreams 对于单个套接字,但我没有这样做。任何帮助将不胜感激。

最佳答案

我认为您可能多次打开输入/输出流。尝试检查 connect-Function 是否仅被调用一次。

关于java - 服务器客户端应用程序的 StreamCorruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16701197/

相关文章:

java - 未抛出 FileAlreadyExistsException 并覆盖文件

Java 屏幕抓取使用套接字?

java - 如何读取/打开名称中有空格的文件

iOS:发送缓冲区中的套接字连接错误

java - 如何导出带有图像和声音的可运行 Jar?

java - 在 Eclipse 上手动安装 subclipse

java - 在 `removeLocationUpdates` 的 `FusedLocationClientProvider` 完成时接收回调的最佳方式是什么

java - 在单个套接字上发送和接收多个请求和响应(多线程)

vb.net - 套接字编程 VB.NET - 无限期地读取 block

java - 如何对字符串 ArrayList 进行合并排序