gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:13 25 4
gpt4 key购买 nike

我有 2 个 java netbeans 项目,一个是服务器,另一个是客户端。我有一个我创建的 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<Message> 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<Message> inFromServerList = new LinkedList<>();
Message msgFrmServer = null;
inFromServerList = (LinkedList<Message>)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<Message> inList = new LinkedList<>();
Message inMsg = null;
inList = (LinkedList<Message>)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());
}
}

“服务器”抛出的异常

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

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

最佳答案

确保服务器端的消息是 rusl.online.examination.system.client.utility.Message。好像不是这样的。

关于java - 通过java中的套接字发送对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19217420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com