DÚVIDA - Chat simples com socket

Olá, estou aprendendo a trabalhar com socket agora e preciso fazer um chat simples, mas eu não sei como fazer o chat continuar, por enquanto está assim:

Servidor

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package servidorTCP;



import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServidorTCP {
    public static void main(String[]args){
    Socket clientSocket = null;
    
    try{
        
        
            int serverPort = 8000;
            ServerSocket listenSocket = new ServerSocket(serverPort);
            clientSocket = listenSocket.accept();
            DataInputStream in = new DataInputStream(clientSocket.getInputStream());
            DataOutputStream o = new DataOutputStream(clientSocket.getOutputStream());
            
       
            String data = in.readUTF();
            
          
            o.writeUTF("Servidor responde " + data);
            
        
    
}catch(IOException e){
    System.out.println("Sock: "+e.getMessage());
}
    }
}

Cliente


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package clienteTCP;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 *
 * @author pauloeduardo
 */
public class ClienteTCP {
    public static void main(String[]args){
       Scanner entrada = new Scanner(System.in);
    Socket s = null;
    try{
        
int serverPort = 8000;
String ip = "111.111.1.1";
s = new Socket(ip,serverPort);
DataInputStream in = new DataInputStream(s.getInputStream());
DataOutputStream o = new DataOutputStream(s.getOutputStream());



System.out.println("DIGITE SEU TEXTO: ");
System.out.println();


o.writeUTF(entrada.nextLine());


String data = in.readUTF();


System.out.println("RECEBIDO:\n"+data);

  
    
    
    
    
 } catch (UnknownHostException e) { 
    System.out.println("Sock:" + e.getMessage()); 
}catch(IOException ex){
    System.out.println("Sock:" + ex.getMessage()); 
}

    
    }
    
  
}

Se alguém puder me dar uma luz, obrigado!

Vou te dar mais ou menos o caminho…

Vc precisa colocar

            String data = in.readUTF();   
            o.writeUTF("Servidor responde " + data);  

e

System.out.println("DIGITE SEU TEXTO: ");  
System.out.println();  
o.writeUTF(entrada.nextLine()); 
String data = in.readUTF();   
System.out.println("RECEBIDO:\n"+data); 

dentro de threads.
Vai precisar utilizar algum sinalizador no servidor para verificar se ouve recebimento de mensagem e u trhead sleep para não sobrecarregar seu sistema. Uns 7 segundos é suficiente.