1

I am developing a simple socket program that can handle object input and output streams. I encountered a problem when trying to read the object from the input stream. I guess there are something wrong in my custom class, but still could not fix the problem.

ServerRequest request = (ServerRequest) ois.readObject();

Error:

ServerThread run
SEVERE: null
java.lang.ClassNotFoundException: ss_client.ServerRequest
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:686)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1866)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1749)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2040)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1571)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at ServerThread.run(ServerThread.java:31)

Client side:

Socket socket = new Socket("localhost",1688);
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

ServerRequest request = new ServerRequest("test", "clientConnect", "something");
oos.writeObject(request);
System.out.println("connection sent");

ServerResponse response = (ServerResponse)ois.readObject();
System.out.println(response.body);
socket.close();

Server side:

ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
ServerRequest request = (ServerRequest) ois.readObject();

switch (request.header) {
    case "clientConnect":
        System.out.println(client.getInetAddress() + " is connected!");
        ServerResponse response = new ServerResponse(200, client.getInetAddress().getHostAddress(), "test", "clientConnect", "debug");
        oos.writeObject(response);
        break;

client.close();

ServerRequest class:

public class ServerRequest implements Serializable {

    private static final long serialVersionUID = 42L;

    public String senderIP;
    public String senderUsername;
    public Timestamp timestamp;
    public String header;
    public Object body;

    ServerRequest(String senderUsername, String header, Object body) throws UnknownHostException {
        this.senderIP = InetAddress.getLocalHost().getHostAddress();
        this.senderUsername = senderUsername;
        this.timestamp = new Timestamp(System.currentTimeMillis());
        this.header = header;
        this.body = body;
    }

  ...setters and getters...
}
  • Are your ServerRequest class just one or you have a copy on each project? Because if it is the later your problem is that your ServerRequest classes are in different packages (yes, that matters). Here read this: https://stackoverflow.com/q/2358886/460557 – Jorge Campos May 16 '18 at 04:08

0 Answers0