Ошибка в клиент серверном приложении

Я разрабатываю клиент-серверное приложение на Java, где клиент отправляет сообщение на сервер, и сервер должен его обработать и вернуть ответ (реализация простого эхо-сервера). Проблема заключается в том, что хотя соединение между клиентом и сервером устанавливается успешно, сообщения отправленные клиентом, не доходят до сервера и не отображаются в текстовой метке. Какие могут быть причины, по которым сервер не получает сообщения от клиента, несмотря на наличие активного соединения, и как можно устранить эту проблему?

Сервер
‘’’ package Server;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;

public class Server {
public static void main(String[] args) {
try(ServerSocket serverSocket = new ServerSocket(8081)){
while(true) {
Socket socket = serverSocket.accept();
System.out.println(“New Client!”);
new Thread(() → new ClientHandler(socket)).start();
}
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}

class ClientHandler implements Runnable{
private final Socket socket;
ClientHandler(Socket socket){
this.socket = socket;
}
@Override
public void run(){
try(DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream())){
while(true) {
String response = in.readUTF();
System.out.println("Client response- " + response);
out.writeUTF(response);
}
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}‘’’

Клиент
‘’'package Server;
import javax.swing.;
import javax.swing.border.LineBorder;
import java.awt.
;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

class Client2 extends JFrame{
private JLabel responseLabel;
private JTextField textField;
private Socket socket;
private DataInputStream in;
private DataOutputStream out;

private Client2(){
    super("Client");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(null); // Используем абсолютное позиционирование

    // Размеры окна
    int width = 400;
    int height = 200;

    // Ширина и высота компонентов
    int labelWidth = 350;
    int labelHeight = 30;
    int textFieldWidth = 150;
    int textFieldHeight = 30;
    int buttonWidth = 120;
    int buttonHeight = 30;

    // Позиции компонентов
    int labelX = (width - labelWidth) / 2;
    int labelY = 20;
    int textFieldX = (width - textFieldWidth) / 2;
    int textFieldY = labelY + labelHeight + 10;
    int buttonX = (width - buttonWidth) / 2;
    int buttonY = textFieldY + textFieldHeight + 10;

    // Инициализация и установка Bounds
    //метка
    responseLabel = new JLabel();
    responseLabel.setBorder(new LineBorder(Color.BLACK, 2));
    responseLabel.setBounds(labelX, labelY, labelWidth, labelHeight);
    //текстовое поле
    textField = new JTextField();
    textField.setBounds(textFieldX, textFieldY, textFieldWidth, textFieldHeight);
    //кнопка
    JButton button = new JButton("Send message");
    button.setFocusPainted(false);
    button.setBounds(buttonX, buttonY, buttonWidth, buttonHeight);
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            new Thread(() -> {
                String message = textField.getText();
                String response = sendMessage(message);
                responseLabel.setText(response);
            }).start();
        }
    });
    // Добавление компонентов
    add(responseLabel);
    add(textField);
    add(button);

    // Настройка окна
    setSize(width, height);
    setVisible(true);
    try{
        socket = new Socket("localhost", 8081);
        out = new DataOutputStream(socket.getOutputStream());
        in = new DataInputStream(socket.getInputStream());
    }
    catch(Exception e){
        System.out.println("Connect dead");
    }
}

private String sendMessage(String message) {
    String response = "";
    try{
        out.writeUTF(message);
        out.flush();  // Убедимся, что данные отправлены
        response = in.readUTF();

    } catch (Exception e) {
        response = "Error- " + e.getMessage();
    }
    return response;
}
public static void main(String[] args){
    // Запуск GUI
    new Client2();
}

} ‘’’