如何在Java中将多个对象发送到套接字
问题描述:
任何人都可以请指教如何通过套接字将多个序列化的对象以java的形式发送到服务器?
目前我的服务器始终只有第一个对象。如何在Java中将多个对象发送到套接字
客户端:
public void communicate() throws UnknownHostException, IOException {
carClientSocket = new Socket("localhost", 4444);
carClientOR = new ObjectOutputStream(carClientSocket.getOutputStream());
Car[] CarList = new Car[11];
for (int i = 1; i <=10; i++) {
//Car alpha;
CarList[i] = new Car("Alpha Romeo","GTI",1999+i);
}
for (int i =1; i<= 10; i++) {
carClientOR.writeObject(CarList[i]);
carClientOR.flush();
//carClientOR.reset();
}
carClientSocket.close();
}
服务器端
public void communicate() throws IOException, ClassNotFoundException {
CarServerSocket = new ServerSocket(4444);
System.out.println("Server is ready and waiting for connection from client..\n");
while (true) {
carSocket = CarServerSocket.accept();
System.out.println("Server Connected");
carServerIR = new ObjectInputStream(carSocket.getInputStream());
Car alpha1 = (Car) carServerIR.readObject();
System.out.println("Object received from car clinet: " + alpha1.getCarBrad() + " " + alpha1.getCarModel() + " " + alpha1.getCarYear());
}
//carSocket.close();
//CarServerSocket.close();
}
答
的问题是在服务器端,由于是在循环中调用carSocket = CarServerSocket.accept();
。它应该在循环之前完成一次,然后你应该得到其他对象:
carSocket = CarServerSocket.accept();
while (true) {
System.out.println("Server Connected");
carServerIR = new ObjectInputStream(carSocket.getInputStream());
Car alpha1 = (Car) carServerIR.readObject();
System.out.println("Object received from car clinet: " + alpha1.getCarBrad() + " " + alpha1.getCarModel() + " " + alpha1.getCarYear());
}
+0
谢谢,但我得到了一个异常,当它尝试了解决方案。 – Asfbar
+0
将accept()移到循环外部将导致只有一个客户端能够连接到服务器端。令人怀疑这是一个理想的行为。 – Dukefirehawk
是的......那是因为你只读一次......你需要一个循环来阅读。 'while((object = input.readObject())!= null)'这就是你应该怎么做的模板 – 3kings
BRAVOֱ!在服务器端使用for循环完美工作。我会尝试一下想法..非常感谢! – Asfbar
没问题,只要确保在客户端你需要'output.writeObject(null)'当你想结束阅读,所以循环踢出 – 3kings