01: //****
02: import java.net.Socket;
03: import java.io.IOException;
04: import java.io.PrintWriter;
05: import java.io.InputStreamReader;
06: import java.io.BufferedReader;
07: public class ReverseClient {
08:     public static void main(String[ ] args) {
09:         // Must be invoked with server's IP address.
10:         if (args.length < 1) {
11:             System.err.println("Usage: ReverseClient <IP address>");
12:             return;
13:         }
14:         try {
15:             // Open a socket to the server.
16:             Socket sock = new Socket(args[0], port);
17:             // Print and send the request string.
18:             String req = "This is the way the world ends";
19:             System.out.println("Sent:     " + req);
20:             PrintWriter out = 
21:               new PrintWriter(sock.getOutputStream());
22:             out.println(req);
23:             out.flush();
24:             // Read and print the response string.
25:             InputStreamReader isr = 
26:               new InputStreamReader(sock.getInputStream());
27:             BufferedReader in = new BufferedReader(isr);
28:             String res = in.readLine();   // blocks
29:             System.out.println("Received: " + res);
30:             // Cleanup.
31:             sock.close();
32:             // Expensive, socket-based palindrome checker.
33:             if (req.equals(res))
34:                 System.out.println("A palindrome!");
35:             else
36:                 System.out.println("Not a palindrome!");
37:         }
38:         catch(IOException e) { System.err.println(e); }
39:     }
40:     private static final int port = 9876;
41: }