我有几个类(class)。 学生、老师和书。
我想将这 3 个对象的实例从服务器发送到连接的客户端。 我知道如何使用以下代码发送/接收单一类型的实例,即学生从服务器到客户端
客户端
Socket socket = new Socket(ip, port);
try {
ObjectInputStream objectInput = new ObjectInputStream(socket.getInputStream());
try {
Object object =(Student) objectInput.readObject();
Student std = (Student) object;
//do something with std
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
服务器端
Student a = new Student();
ServerSocket myServerSocket = new ServerSocket(port);
Socket skt = myServerSocket.accept();
try
{
ObjectOutputStream objectOutput = new ObjectOutputStream(skt.getOutputStream());
objectOutput.writeObject(a);
}
catch (IOException e)
{
e.printStackTrace();
}
如何扩展此代码以能够从服务器发送不同类型的对象并在客户端正确接收它们
我是否需要将它们全部包装在另一个对象中并为每个对象指定一个类型? 谢谢!
最佳答案
Do I need to wrap them all in another object and give each one a type?
创建一个聚合所有对象实例的类可能是更好的设计。这将防止错误并产生更具可读性的代码。
如果您只想在客户端和服务器之间交换纯 Java 对象,您最好使用像 Remote method invocation 这样的东西。 (文章中包含示例)。
How to extend this code to be able to send different types of objects from server?
如果你坚持学习套接字,你可以一个接一个地发送和接收对象实例。
您还可以发送对象数组。
客户端示例:
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1", 6060);
try {
ObjectInputStream objectInput = new ObjectInputStream(socket.getInputStream());
Student student = (Student)objectInput.readObject();
System.out.println("Received student (" + student + ")");
objectInput = new ObjectInputStream(socket.getInputStream());
Teacher teacher = (Teacher) objectInput.readObject();
System.out.println("Received teacher (" + teacher + ")");
//do something with std
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
socket.close();
}
}
}
服务器示例:
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket myServerSocket = new ServerSocket(6060);
System.out.println("Up and running");
Socket skt = myServerSocket.accept();
try {
Student student = new Student();
ObjectOutputStream objectOutput = new ObjectOutputStream(skt.getOutputStream());
objectOutput.writeObject(student);
System.out.println("Sent student");
Teacher teacher = new Teacher();
objectOutput = new ObjectOutputStream(skt.getOutputStream());
objectOutput.writeObject(teacher);
System.out.println("Sent teacher");
}
catch (IOException e) {
e.printStackTrace();
} finally {
myServerSocket.close();
}
System.out.println("Shutting down");
}
}
但是这种方法很难理解并且容易出错,因为如果你没有在 Client
和 Server
上得到正确的顺序,那么这段代码就不会工作。
关于java - 在 Java 中将不同的对象发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26255223/