Client.java

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

public class Client {

    private static Socket client;
    private static int PORT = 10000;
    private static ObjectInputStream input;
    private static ObjectOutputStream output;

    public static void connectToServer() {
        try {
            System.out.println("connectToServer()");
            client = new Socket("127.0.0.1", PORT);
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void getStream() {
        try {
            System.out.println("getStream()");
            output = new ObjectOutputStream(client.getOutputStream());
            output.flush();
            input = new ObjectInputStream(client.getInputStream());
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void processConnection() {
        try {
            System.out.println("processConnection()");
            String message = "Client Connected";

            do {
                message = (String) input.readObject();
                System.out.println("Message: " + message);

                sendData("Message 1");
                sendData("Message 2");
                sendData("TERMINATE");

            } while (!message.equals("TERMINATE"));
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void closeConnection() {
        try {
            System.out.println("closeConnection()");
            output.close();
            input.close();
            client.close();
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    private static void sendData(String message) {
        try {
            output.writeObject(message);
            output.flush();
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void runClient() {
        System.out.println("runServer()");
        try {
            connectToServer();
            getStream();
            processConnection();
            closeConnection();
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void main(String args[]) {
        System.out.println("Client - Main()");
        runClient();
    }
}

Server.java

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

public class Server {

    private static ServerSocket server;
    private static Socket connection;
    private static int PORT = 10000;
    private static ObjectInputStream input;
    private static ObjectOutputStream output;
    private static int counter = 0;

    public static void waitForConnection() {
        try {
            System.out.println("waitForConnectcion()");
            connection = server.accept();
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void getStream() {
        try {
            System.out.println("getStream()");
            output = new ObjectOutputStream(connection.getOutputStream());
            output.flush();
            input = new ObjectInputStream(connection.getInputStream());
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void processConnection() {
        try {
            System.out.println("processConnection()");
            String message = "Server Connected";

            output.writeObject(message);
            output.flush();

            do {
                message = (String) input.readObject();
                System.out.println("Message: " + message);
            } while (!message.equals("TERMINATE"));
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void closeConnection() {
        try {
            System.out.println("closeConnection()");
            output.close();
            input.close();
            connection.close();
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void runServer() {
        System.out.println("runServer()");
        try {
            server = new ServerSocket(PORT);
            while (true) {
                waitForConnection();
                getStream();
                processConnection();
                closeConnection();
                counter++;
            }
        } catch (Exception e) {
            System.out.println("Exception: " + e);
        }
    }

    public static void main(String args[]) {
        System.out.println("Server - Main()");
        runServer();
    }
}

Output Server

waitForConnectcion()
getStream()
processConnection()
Message: Message 1
Message: Message 2
Message: TERMINATE
closeConnection()
waitForConnectcion()

Output Client

runServer()
connectToServer()
getStream()
processConnection()
Message: Server Connected
Exception: java.io.EOFException
closeConnection()