[RESOLVIDO] Dúvida Sockets - Servidor respondendo para Cliente

Olá pessoal,
To começando a mexer com Sockets em JAVA e a minha dúvida eh a seguinte:
Tenho uma aplicação exemplo onde o cliente envia uma mensagem e o servidor recebe normalmente porém eu gostaria de saber como o servidor poderia retornar uma mensagem para o cliente informando que a mensagem foi recebida.
No servidor to tentando utilizar o DataOutputStream para fazer esse retorno mas nao está funcionando.

Segue os códigos


Cliente

        try {
            Socket socket = new Socket("192.168.0.161", 9191);
            ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
            out.writeUTF("Cliente mandando mensagem");

            
            // Cria um buffer que armazenará as informações retornadas pelo servidor
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String retorno = inFromServer.readLine();
            System.out.println(retorno);

            
            out.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

Servidor


        try {
            ServerSocket ss = new ServerSocket(9191);
            while (true) {
                System.out.println("Servidor aguardando...");
                Socket socket = ss.accept();

                ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
                String mensagem = in.readUTF();
                System.out.println(mensagem);//mensagem recebida

                
                //  Cria uma stream de sáida para retorno das informações ao cliente
                DataOutputStream outToClient = new DataOutputStream(socket.getOutputStream());
                outToClient.writeBytes("sua mensagem foi recebida");

            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

Aguém tem idéia ?

Para trabalhar com sockets é fundamental que você conheça a API java.io do Java. Uma informação que você precisa saber é a de que os streams da API java.io são síncronos, ou seja, os métodos dos streams bloqueiam a thread atual até que a operação seja completada. Por exemplo, se você mandar um BufferedInputStream ler N bytes de alguma fonte, a thread ficará bloqueada até que os N bytes estejam disponíveis.

No seu caso, ao usar um BufferedReader e tentar ler do socket com readLine(), o método readLine() vai bloquear a thread cliente até que um terminador de linha esteja disponível (\n ou \r\n, dependendo do SO). Se você observar, o servidor não envia esse caractere.

Por fim, a minha sugestão é que ao utilizar sockets delimite as mensagens em termos de tamanho, e não em termos de caractere ou byte especial.

E aih rmendes08, valeu pelas dicas
Problema resolvido.

Segue as alterações


Cliente

        try {
            Socket socket = new Socket("192.168.0.191", 9191);
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            out.writeUTF("Cliente mandando mensagem");


            DataInputStream in = new DataInputStream(socket.getInputStream());
            String mensagem = in.readUTF();
            System.out.println(mensagem);//cliente recebendo retorno do servidor


            out.close();
            in.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

Servidor

        try {
            ServerSocket ss = new ServerSocket(9191);
            while (true) {
                System.out.println("Servidor aguardando...");
                Socket socket = ss.accept();

                DataInputStream in = new DataInputStream(socket.getInputStream());
                String mensagem = in.readUTF();
                System.out.println(mensagem);//mensagem recebida do cliente 


                DataOutputStream out = new DataOutputStream(socket.getOutputStream());
                out.writeUTF("sua mensagem foi recebida");// retornando mensagem

                in.close();
                out.close();
                socket.close();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }