gpt4 book ai didi

java服务器未从客户端接收对象

转载 作者:行者123 更新时间:2023-12-02 08:31:00 27 4
gpt4 key购买 nike

我有一个将类对象发送到服务器的客户端。服务器应该调用该类的方法并返回结果。当我运行程序时,出现以下异常 java.lang.ClassNotFoundException: newclient.TestObject。

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

谢谢!

最佳答案

您的服务器在其类路径中需要 newclient.TestObject.class。

你的目录结构应该是这样的:

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

Where CWD is the current working directory. You should stand in that top directory and run

java -classpath . newserver.SERVER

关于java服务器未从客户端接收对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3367826/

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