如何在Java中将多个对象发送到套接字

如何在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(); 
} 
+1

是的......那是因为你只读一次......你需要一个循环来阅读。 'while((object = input.readObject())!= null)'这就是你应该怎么做的模板 – 3kings

+0

BRAVOֱ!在服务器端使用for循环完美工作。我会尝试一下想法..非常感谢! – Asfbar

+0

没问题,只要确保在客户端你需要'output.writeObject(null)'当你想结束阅读,所以循环踢出 – 3kings

的问题是在服务器端,由于是在循环中调用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