Java ObjectInputStream (сервер \ клиент)

Поток сервера

package schatserver;

public ServerThread(Socket socket) {
        this.socket = socket;
        this.start();
    } 



 public void run() {
        try {
             ObjectInputStream inputStream = new ObjectInputStream(this.socket.getInputStream());
              ObjectOutputStream outputStream = new ObjectOutputStream(this.socket.getOutputStream());
        container = (Message) inputStream.readObject();  
        .....
        ..... etc

и "Класс сообщения" содержит как на стороне сервера, так и на стороне клиента

public class Message implements Serializable {

private String login;
private String message;
private String[] users;
private Date time;

public Message(String login, String message){ //for client
        this.login = login;
        this.message = message;
        this.time = java.util.Calendar.getInstance().getTime();
    }


 public Message(String login, String message, String[] users){//for server
        this.login = login;
        this.message = message;
        this.time = java.util.Calendar.getInstance().getTime();
        this.users = users;
    }

Попытка отправки объекта "Сообщение"

private static Message message;

public void Connect() {
        try {            
            sock = new Socket(ClientConfig.HOST, ClientConfig.PORT);
            System.out.println("Connected with: " + ClientConfig.HOST);                        
            ObjectOutputStream out = new ObjectOutputStream(sock.getOutputStream());
            out.writeObject(message);
            out.flush();

получение "java.lang.ClassNotFoundException: socketchatclient.Message" в этой строке

 container = (Message) inputStream.readObject();  

Может ли кто-нибудь объяснить мне, как я должен отправить объект сообщения?

socketchatclient. - это клиентский пакет

1 ответ

Решение

java.lang.ClassNotFoundException: socketchatclient.Message

Это означает, что вы пытаетесь десериализовать класс, которого у вас нет. Скорее всего, код на вашем клиенте отличается от кода на сервере, и клиент сериализовал свой класс, но если сервер не имеет этот класс в том же пакете, он не может десериализовать его.

Я предлагаю вам иметь общий модуль для сериализуемых объектов и общий ресурс клиента и сервера, чтобы гарантировать, что одни и те же классы доступны на обоих концах.

Другие вопросы по тегам