当前位置: 首页 > 面试题库 >

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

缪修德
2023-03-14
问题内容

我有2个java
netbeans项目,一个是Server,另一个是Client。我已经创建了一个Message类,该类要传递给服务器,并在服务器上进行修改后以另一种方式返回给客户端。我在两个项目中都包含了Message类。我使用ObjectOutputStreamObjectInputStream传递对象。服务器和客户端之间的连接正常,并且对象通过,但在服务器上,当我从ObjectInputStreamusing
readObject()方法读取对象时,将其类型转换为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的socket发送一个custome对象。我知道我需要将具有我需要发送的对象的类放在相同的包中,具有相同的serialVersionUID并实现Serializable。我已经这样做了,但我仍然不能通过套接字发送对象。我错在哪里了? 以下是客户端代码: 客户端中的类用户 发送user类对象的代码: 这里是服务器的代码: user类的代码:与客户端的user完全相同(我从客户端复

  • 我有一个问题,然后通过套接字发送列表,它必须是字节样的对象,好吧,我可以转换它字符串,然后做,但问题是字符串,这是很难重建它 列表从字符串,和从库 没有工作,然后我有这样的东西: 这就是问题所在,我必须拥有这些对象,我的问题是如何发送python对象而不需要将其转换为字符串,或者类似于JSON之类的对象符号? 这可以通过Python套接字文档在基本套接字服务器上进行测试。 失败的文本评估: 错误:

  • 问题内容: 我和一群朋友正在用Java开发项目,我们需要一些有关通过套接字发送对象的帮助。 到目前为止,我们已经实现了使用和通过套接字发送简单的对象(int,字符串和诸如此类)。但是,我们今天遇到了一个大问题(无论如何对我们来说都是巨大的^^) 我们有一个树状结构,需要从一台PC发送到另一台PC。问题在于,在该树的每个节点中,我们都有对BufferedImage的引用,并且该引用不可序列化。 今天

  • 我在网上搜索了很多,但是没有找到通过套接字发送对象并按原样接收的解决方案。我知道它需要酸洗,我已经做过了。将其转换为字节,然后从另一方面接收。但如何将这些字节转换为该类型的对象。 这是在客户端将对象转换为StringIO并发送到服务器的代码。在服务器端,我得到字节。现在我正在搜索要再次转换为StringIO的字节,以便获得对象值。 在代码中,对象被包装在StringIO中,并通过套接字发送。任何更

  • 问题内容: 您好,我尝试使用Java中的客户端-服务器类发送文件。由于某种原因,当调用发送文件的方法时,套接字关闭。这是代码: 和来自客户端的代码: 和我得到的错误消息:严重:null java.net.SocketException:套接字已关闭 我对此并没有真正的经验,所以如果有帮助的话会很棒。 问题答案: 该方法返回一个,代表它实际读取的字节数。不能保证从字节数组中读取所需的字节数。它通常会

  • 问题内容: 我正在尝试用Python编写一个实现套接字的程序,每个客户端发送一个PDF文件,服务器接收该文件,标题更改为“ file_number.pdf”(即:file_1.pdf)。出现的问题是只有客户端才能成功发送文件。当第二个客户端尝试发送程序时,它确实崩溃了。我在做什么错,我该如何解决我的代码以允许N个客户端(N <20)连接到服务器并传输文件? 这是服务器代码: 这是客户端代码: 为了