Я пытаюсь подключить клиента к серверу с помощью сокетов.
Код сервера:
ServerSocket server = new ServerSocket(6780);
Socket clientSocket = server.accept();
ObjectInputStream fromClient= new ObjectInputStream(clientSocket.getInputStream());
ObjectOutputStream toClient = new ObjectOutputStream(clientSocket.getOutputStream());
Код клиента:
Socket nodeSocket = new Socket(ServerIP, 6780);
ObjectInputStream fromServer = new ObjectInputStream(nodeSocket.getInputStream());
ObjectOutputStream toServer = new ObjectOutputStream(nodeSocket.getOutputStream());
toServer.writeObject(this);
Когда клиент подключается, сервер прослушивает и принимает соединение с клиентом. Но когда я пытаюсь написать свой объект класса на сервер, "toServer.writeObject(this);" он бросает
java.io.NotSerializableException: Peer
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at Peer.requestEntryNode(Peer.java:47)
at Peer.main(Peer.java:87)
Peer - это мое имя класса.
Я попытался выяснить причину этого исключения, он говорит, что объект, который должен быть написан, должен быть сериализуемым. Я также попытался реализовать интерфейс Serializable из класса Peer. Но это не помогает.
Может ли кто-нибудь предложить?
Убедитесь, что ваш класс Peer
и его зависимости реализуют интерфейс java.io.Serializable
:
import java.io.Serializable;
public class Peer implements Serializable {
...
}
Спасибо всем за ответ.
Я нашел решение. Я сделал класс Peer для реализации Serializable и тех классов, на которые ссылались классы Peer.
ObjectOutputStream и ObjectInputStream не сериализованы. Поэтому я не могу сделать их переменными класса. Я объявлял их локальными для каждого метода.
Сейчас работает отлично.