// Copyright (c) 1998, Arthur Gittleman
//This example is provided WITHOUT ANY WARRANTY either expressed or implied.

//Modified by Roy Pargas, September 10, 2002
//  Loop retructured; comments added
//Further minor changes by David Matuszek, October 14, 2004

import java.net.*;
import java.io.*;

/**
 * Connects to a server which reverses whatever the user inputs.
 * The server's host must be specified on the command line (may
 * be the word "localhost").
 */
public class ReverseClient {
    
    public static void main(String[] args) {

        String s; // the string to reverse
        String r; // the reversed string

        if (args.length != 1) {
            System.out.println("Usage: java ReverseClient host");
            System.exit(1);
        }
        System.out.println("Client has started.");
        try {
            Socket server = new Socket(args[0], 5678);
            System.out.println("Connected to ReverseServer host " +
                               server.getInetAddress());
            BufferedReader fromServer =
                new BufferedReader(new InputStreamReader(server.getInputStream()));
            PrintWriter toServer =
                new PrintWriter(server.getOutputStream(), true);
            BufferedReader input = 
                new BufferedReader(new InputStreamReader(System.in));

            System.out.print("# ");        // prompt client for another message
            System.out.flush();            // display prompt
            s = input.readLine();          // receive message from client

            while (!s.equals("quit")) {
                toServer.println(s);       // send client's message to server
                r = fromServer.readLine(); // receive response from server
                System.out.println(r);     // print response

                System.out.print("# ");    // prompt client for another message
                System.out.flush();        // display prompt
                s = input.readLine();      // receive message from client; "quit" ends
            }

            // cleanup; close all streams
            fromServer.close();
            toServer.close();
            input.close();
            server.close();

        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            System.out.println("Client is stopped.");
        }
    }
}          
