import java.io.*;
import java.net.*;

public class Client {
    private Socket clientSocket;
    private PrintWriter writer;
    private BufferedReader reader;

    public Client(String serverAddress, int serverPort) throws IOException {
        clientSocket = new Socket(serverAddress, serverPort);
        writer = new PrintWriter(clientSocket.getOutputStream(), true);
        reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    }

    public void start() throws IOException {
        System.out.println("Connected to server: " + clientSocket.getRemoteSocketAddress());

        new Thread(() -> {
            try {
                String inputLine;

                while ((inputLine = reader.readLine()) != null) {
                    System.out.println(inputLine);
                }
            } catch (IOException e) {
                System.out.println("Error receiving message: " + e);
            }
        }).start();

        BufferedReader stdio = new BufferedReader(new InputStreamReader(System.in));
        String message;

        while ((message = stdio.readLine()) != null) {
            writer.println(message);
        }
    }

    public static void main(String[] args) throws IOException {
        Client client = new Client("localhost", 4321);
        client.start();
    }
}