I have a client that sends a class object to the server. The server should invoke the methods of that class and return the result. I am getting the following exception java.lang.ClassNotFoundException: newclient.TestObject when I run my program.
server.java:
package newserve;
import java.net.*;
import java.io.*;
import java.lang.reflect.*;
public class SERVER {
public static void main(String[] args) {
int port = 9876;
try {
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
//read the first object from the socket
Object o1 = /*(Object)*/ois.readObject();
//Handling the first received object
if (o1 != null){
System.out.println("\nFROM SERVER - receiving class: " +
o1.getClass().getName());
System.out.println("\nWith these methods: \n" );
//get all the methods into an array
Method[] methods = o1.getClass().getDeclaredMethods();
//print the methods
for(int i = 0; i < methods.length; i++)
System.out.println(methods[i]);
//invoking the first method with default constructor
Object a = methods[0].invoke(o1.getClass().newInstance(),
new Object[] {3, 5});
System.out.println("\nOutput of the first method: " + a);
}
//read the second object from the socket
Object o2 = ois.readObject();
System.out.println("\n\nFROM SERVER - receiving class: " +
o2.getClass().getName());
System.out.println("\nWith these: " + o2);
//close everything and shut down
is.close(); //close input stream
s.close(); //close the socket
ss.close(); //close the server's socket
}catch(Exception e){System.out.println(e);}
}
}
client.java:
package newclient;
import java.net.*;
import java.io.*;
public class CLIENT {
public static void main(String[] args) {
int port = 9876;
try{
Socket s = new Socket("localhost", port);
OutputStream os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
Object to = new TestObject(); //create a new object
oos.writeObject(to); //send the object to the server
// create a new String object and send
oos.writeObject(new String("A String object from client"));
//close the connection
oos.close();
os.close();
s.close();
}catch(Exception e){System.out.println(e);}
}
}
TestObject.java:
package newclient;
import java.io.*;
/**
* A test object to send via socket
*/
class TestObject implements Serializable {
static final long serialVersionUID = 0;
//constructor
public TestObject(){};//default constructor
//method
public int add(int a, int b){return a+b;}
public int sub(int a, int b){ return a-b;}
}
Thank You!