Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中如何向套接字发送多个对象_Java_Sockets_Client Server - Fatal编程技术网

Java中如何向套接字发送多个对象

Java中如何向套接字发送多个对象,java,sockets,client-server,Java,Sockets,Client Server,有人能建议如何通过套接字将多个java序列化对象发送到服务器吗? 当前,我的服务器总是只获取第一个对象 客户端: public void communicate() throws UnknownHostException, IOException { carClientSocket = new Socket("localhost", 4444); carClientOR = new ObjectOutputStream(carClientSocket.getOutputStrea

有人能建议如何通过套接字将多个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();
}

问题出在服务器端,原因是调用
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());
}

是 啊那是因为你只看了一次。。。你需要一个循环来阅读<代码>while((object=input.readObject())!=null)
这只是你应该如何做的一个模板!在服务器端完美地使用for循环。我要试试这个主意。。谢谢!没有问题,只要确保在客户端,当您想要结束读取时,您需要
输出。writeObject(null)
,这样循环就会启动谢谢,但当它尝试该解决方案时,我遇到了一个异常。将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());
}