2010-07-29 4 views
0

У меня есть клиент, который отправляет объект класса на сервер. Сервер должен вызывать методы этого класса и возвращать результат. Я получаю следующее исключение java.lang.ClassNotFoundException: newclient.TestObject при запуске моей программы.java-сервер, не получающий объект от клиента

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;} 
} 

Спасибо!

+0

Тест на нуль бессмыслен, если вы не планируете писать нули. – EJP

ответ

2

Ваш сервер будет нуждаться в newclient.TestObject.class в своем пути к классам.

Ваша структура каталогов должна быть что-то вроде этого:

 
(CWD) 
├── newclient 
│   ├── CLIENT.class 
│   └── TestObject.class 
└── newserver 
    └── SERVER.class 

Где УХО это текущий рабочий каталог. Вы должны стоять в этом верхнем каталоге и запускать

java -classpath . newserver.SERVER 
+0

Как добавить newclient.TestObject.class в его путь к классам? – Atiya

0

Я предполагаю, что клиентские и серверные программы работают на разных машинах. Затем, поскольку nos сказал, что вам нужно добавить к пути к классам сервера.

Ваш клиент должен выглядеть следующим образом

(CWD) 
├── newclient 
│ ├── CLIENT.class 
│ └── TestObject.class 

и вы должны запустить его как этот

java -classpath . newclient.CLIENT.class 

Ваш сервер должен выглядеть следующим образом (обратите внимание, что необходимо TestObject.class)

(CWD) 
├── newclient 
│ └── TestObject.class 
└── newserver 
    └── SERVER.class 

и вы должны начать его следующим образом

java -classpath. newserver.CLIENT.class

Смежные вопросы