通过java中的套接字发送对象

我有2个java netbeans项目,一个是Server,另一个是Client。 我有一个我创建的Message类,我希望将其传递给服务器,并在服务器上完成修改后返回到客户端。 我在两个项目中都包含了Message类。 我使用ObjectOutputStreamObjectInputStream来传递对象。 服务器和客户端之间的连接是正常的,对象通过但在服务器上,当我使用readObject()方法从ObjectInputStream读取对象时,我将其类型转换为Message类。 但是在服务器上抛出了ClassNotFoundException 。 它找不到Message类。 我该如何解决这个问题?

客户代码:

 public void startClient() { try { // Create the socket Socket clientSocket = new Socket(HOST, PORT); // Create the input & output streams to the server ObjectOutputStream outToServer = new ObjectOutputStream(clientSocket.getOutputStream()); ObjectInputStream inFromServer = new ObjectInputStream(clientSocket.getInputStream()); // Read modify // TODO here /* Create The Message Object to send */ LinkedList msgList = new LinkedList(); Message msg = new Message(); msg.setMessage("Kasun"); msg.setIndex(1); msg.setAverage(5.5f); msgList.push(msg); /* Send the Message Object to the server */ outToServer.writeObject(msgList); /* Retrive the Message Object from server */ LinkedList inFromServerList = new LinkedList(); Message msgFrmServer = null; inFromServerList = (LinkedList)inFromServer.readObject(); msgFrmServer = inFromServerList.pop(); /* Print out the recived Message */ System.out.println("Message: " + msgFrmServer.getMessage()); System.out.println("Index: " + msgFrmServer.getIndex()); System.out.println("Average: " + msgFrmServer.getAverage()); clientSocket.close(); } catch (Exception e) { System.err.println("Client Error: " + e.getMessage()); System.err.println("Localized: " + e.getLocalizedMessage()); System.err.println("Stack Trace: " + e.getStackTrace()); } } 

服务器代码

 public void startServer() { try { ServerSocket welcomeSocket = new ServerSocket(PORT); while (true) { // Create the Client Socket Socket clientSocket = welcomeSocket.accept(); System.out.println("Socket Extablished..."); // Create input and output streams to client ObjectOutputStream outToClient = new ObjectOutputStream(clientSocket.getOutputStream()); ObjectInputStream inFromClient = new ObjectInputStream(clientSocket.getInputStream()); // Read modify // TODO here /* Create Message object and retrive information */ LinkedList inList = new LinkedList(); Message inMsg = null; inList = (LinkedList)inFromClient.readObject(); inMsg = inList.pop(); /* Modify the message object */ inMsg.setMessage(inMsg.getMessage().toUpperCase()); inMsg.setIndex(5); inMsg.setAverage(10.5f); /* Send the modified Message object back */ outToClient.writeObject(inMsg); } } catch (Exception e) { System.err.println("Server Error: " + e.getMessage()); System.err.println("Localized: " + e.getLocalizedMessage()); System.err.println("Stack Trace: " + e.getStackTrace()); System.err.println("To String: " + e.toString()); } } 

在“服务器”抛出的exception

 java.lang.ClassNotFoundException: rusl.online.examination.system.client.utility.Message 

我必须使用java RMI吗? 有没有使用RMI的解决方案?

确保服务器端的Message是rusl.online.examination.system.client.utility.Message 。 似乎并非如此。

如果要通过套接字发送类的对象。 为了在另一端再现对象,您必须转换对象。 为此,您需要两端的类定义。

确保为服务器程序正确导入相同的Message类,用于创建消息。