Java 在客户端和服务器进程之间使用ObjectInputStream和ObjectOutputStream

Java 在客户端和服务器进程之间使用ObjectInputStream和ObjectOutputStream,java,sockets,inputstream,outputstream,Java,Sockets,Inputstream,Outputstream,我开发了一个客户机-服务器java应用程序,并使用ObjectOutputStream和ObjectInputStream在客户机和服务器进程之间发送和接收数据。我需要发送数组、对象或基本数据 但当我使用ObjectOutputStream和ObjectInputStream发送和接收原语值(writeDouble()、readDouble()、writeUTF()、readUTF())时,问题就出现了。程序挂起并停止工作。怎么了,有什么问题 这些是我程序的一部分 // client progr

我开发了一个客户机-服务器java应用程序,并使用ObjectOutputStream和ObjectInputStream在客户机和服务器进程之间发送和接收数据。我需要发送数组、对象或基本数据 但当我使用ObjectOutputStream和ObjectInputStream发送和接收原语值(writeDouble()、readDouble()、writeUTF()、readUTF())时,问题就出现了。程序挂起并停止工作。怎么了,有什么问题

这些是我程序的一部分

// client program

    ObjectOutputStream toServer;
    ObjectInputStream fromServer;

// Establish connection with the server
            Socket socket = new Socket(host, 7000);

            // Create an output stream to the server
            toServer = new ObjectOutputStream(socket.getOutputStream());
            fromServer = new ObjectInputStream(socket.getInputStream());

double num1 = Double.parseDouble(jtf1.getText().trim());
                    double num2 = Double.parseDouble(jtf2.getText().trim());
                    try {
                        toServer.writeUTF("multiply");
                        toServer.writeDouble(num1);
                        toServer.writeDouble(num2);
                        double result = fromServer.readDouble();
                        res.setText(String.valueOf(result));
                    } catch (IOException ex) {
                        System.err.println(ex);
                    }

// server program

private ObjectOutputStream outputToClient;
    private ObjectInputStream inputFromClient;

// Create a server socket
            ServerSocket serverSocket = new ServerSocket(7000);

while (true) {
                // Listen for a new connection request
                Socket socket = serverSocket.accept();
                System.out.println("connect ");
                outputToClient = new ObjectOutputStream(socket.getOutputStream());
                // Create an input stream from the socket
                inputFromClient =
                        new ObjectInputStream(socket.getInputStream());
                while(true)  {
                // Read from input
                String command = inputFromClient.readUTF();
                System.out.println("receive command");
                checkRequest(command);
                }
                // Write to the file
                //outputToFile.writeObject(object);

            }

public void checkRequest(String cmd){
        //Object o = null;
        try{
        if(cmd.equals(MULTIBLY)){
            double x = inputFromClient.readDouble();
            double y = inputFromClient.readDouble();
            double result = x*y;
            outputToClient.writeDouble(result);
            System.out.println("send result");
        }else if (cmd.equals(DIVIDE)){
            int x = inputFromClient.readInt();
            int result = 1000/x;
            outputToClient.writeDouble(result);
        }
        } catch(IOException io){

        }
    }
当我将ObjectOutputstream和ObjectInputStream更改为DataOutputStream时 和DataInputStream一切都正常

必须在客户端的流上调用flush()来实际发送数据(如果套接字的缓冲区未满)。 您会看到程序挂起,因为客户端不发送数据,而服务器正在阻塞,等待永远不会出现的数据。

在发送数据和接收数据之前使用flush()?