Java.io.StreamCorruptedException: недопустимый заголовок потока: 54657374

Я пытаюсь прочитать строку, которая отправляется клиентом с помощью программы Socket. Код выглядит следующим образом:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ClassNotFoundException;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServerExample {

    //static ServerSocket variable
    private static ServerSocket server;
    //socket server port on which it will listen
    private static int port = 5000;

    public static void main(String args[]) throws IOException, ClassNotFoundException{
        //create the socket server object
        server = new ServerSocket(port);
        //keep listens indefinitely until receives 'exit' call or program terminates
        while(true){
            System.out.println("Waiting for client request");
            //creating socket and waiting for client connection
            Socket socket = server.accept();
            //read from socket to ObjectInputStream object
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //convert ObjectInputStream object to String
            String message = (String) ois.readObject();
            System.out.println("Message Received: " + message);
            //create ObjectOutputStream object
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            //write object to Socket
            oos.writeObject("Hi Client "+message);
            //close resources
            ois.close();
            oos.close();
            socket.close();
            //terminate the server if client sends exit request
            if(message.equalsIgnoreCase("exit")) break;
        }
        System.out.println("Shutting down Socket server!!");
        //close the ServerSocket object
        server.close();
    }

}

Но при чтении строки от клиента я получаю ошибку следующим образом:

Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 54657374
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:803)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
    at SocketServerExample.main(SocketServerExample.java:29)

Я искал и не смог найти ошибку. Пожалуйста, помогите мне.

Ответы

Ответ 1

Очевидно, что вы не отправляете данные с помощью ObjectOutputStream:, вы просто пишете байты.

  • Если вы читаете с помощью readObject(), вы должны написать с помощью writeObject().
  • Если вы читаете с помощью readUTF(), вы должны написать с помощью writeUTF().
  • Если вы читаете с помощью readXXX(), вы должны написать с помощью writeXXX(), для большинства значений XXX.

Ответ 2

Вы не можете ожидать, что ObjectInputStream автоматически преобразует текст в объекты. Шестнадцатеричный 54657374 является "Test" как текст. Вы должны отправлять его напрямую в виде байтов.