Client and Server Demo | ![]() |
/* From http://java.sun.com/docs/books/tutorial/index.html */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class EchoClient { public static void main ( String [] args ) throws IOException { Socket echoSocket = null ; PrintWriter out = null ; BufferedReader in = null ; try { echoSocket = new Socket ( "taranis" , 7 ) ; out = new PrintWriter ( echoSocket.getOutputStream () , true ) ; in = new BufferedReader ( new InputStreamReader ( echoSocket.getInputStream ())) ; } catch ( UnknownHostException e ) { System.err.println ( "Don't know about host: taranis." ) ; System.exit ( 1 ) ; } catch ( IOException e ) { System.err.println ( "Couldn't get I/O for " + "the connection to: taranis." ) ; System.exit ( 1 ) ; } BufferedReader stdIn = new BufferedReader ( new InputStreamReader ( System.in )) ; String userInput; while (( userInput = stdIn.readLine ()) != null ) { out.println ( userInput ) ; System.out.println ( "echo: " + in.readLine ()) ; } out.close () ; in.close () ; stdIn.close () ; echoSocket.close () ; } } import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class KnockKnockServer { public static void main ( String [] args ) throws IOException { ServerSocket serverSocket = null ; try { serverSocket = new ServerSocket ( 4444 ) ; } catch ( IOException e ) { System.err.println ( "Could not listen on port: 4444." ) ; System.exit ( 1 ) ; } Socket clientSocket = null ; try { clientSocket = serverSocket.accept () ; } catch ( IOException e ) { System.err.println ( "Accept failed." ) ; System.exit ( 1 ) ; } PrintWriter out = new PrintWriter ( clientSocket.getOutputStream () , true ) ; BufferedReader in = new BufferedReader ( new InputStreamReader ( clientSocket.getInputStream ())) ; String inputLine, outputLine; KnockKnockProtocol kkp = new KnockKnockProtocol () ; outputLine = kkp.processInput ( null ) ; out.println ( outputLine ) ; while (( inputLine = in.readLine ()) != null ) { outputLine = kkp.processInput ( inputLine ) ; out.println ( outputLine ) ; if ( outputLine.equals ( "Bye." )) break ; } out.close () ; in.close () ; clientSocket.close () ; serverSocket.close () ; } } class KnockKnockProtocol { private static final int WAITING = 0 ; private static final int SENTKNOCKKNOCK = 1 ; private static final int SENTCLUE = 2 ; private static final int ANOTHER = 3 ; private static final int NUMJOKES = 5 ; private int state = WAITING; private int currentJoke = 0 ; private String [] clues = { "Turnip" , "Little Old Lady" , "Atch" , "Who" , "Who" } ; private String [] answers = { "Turnip the heat, it's cold in here!" , "I didn't know you could yodel!" , "Bless you!" , "Is there an owl in here?" , "Is there an echo in here?" } ; public String processInput ( String theInput ) { String theOutput = null ; if ( state == WAITING ) { theOutput = "Knock! Knock!" ; state = SENTKNOCKKNOCK; } else if ( state == SENTKNOCKKNOCK ) { if ( theInput.equalsIgnoreCase ( "Who's there?" )) { theOutput = clues [ currentJoke ] ; state = SENTCLUE; } else { theOutput = "You're supposed to say \"Who's there?\"! " + "Try again. Knock! Knock!" ; } } else if ( state == SENTCLUE ) { if ( theInput.equalsIgnoreCase ( clues [ currentJoke ] + " who?" )) { theOutput = answers [ currentJoke ] + " Want another? (y/n)" ; state = ANOTHER; } else { theOutput = "You're supposed to say \"" + clues [ currentJoke ] + " who?\"" + "! Try again. Knock! Knock!" ; state = SENTKNOCKKNOCK; } } else if ( state == ANOTHER ) { if ( theInput.equalsIgnoreCase ( "y" )) { theOutput = "Knock! Knock!" ; if ( currentJoke == ( NUMJOKES - 1 )) currentJoke = 0 ; else currentJoke++; state = SENTKNOCKKNOCK; } else { theOutput = "Bye." ; state = WAITING; } } return theOutput; } } import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class KKMultiServer { public static void main ( String [] args ) throws IOException { ServerSocket serverSocket = null ; boolean listening = true ; try { serverSocket = new ServerSocket ( 4444 ) ; } catch ( IOException e ) { System.err.println ( "Could not listen on port: 4444." ) ; System.exit ( - 1 ) ; } while ( listening ) new KKMultiServerThread ( serverSocket.accept ()) .start () ; serverSocket.close () ; } } class KKMultiServerThread extends Thread { private Socket socket = null ; public KKMultiServerThread ( Socket socket ) { super ( "KKMultiServerThread" ) ; this .socket = socket; } public void run () { try { PrintWriter out = new PrintWriter ( socket.getOutputStream () , true ) ; BufferedReader in = new BufferedReader ( new InputStreamReader ( socket .getInputStream ())) ; String inputLine, outputLine; KnockKnockProtocol kkp = new KnockKnockProtocol () ; outputLine = kkp.processInput ( null ) ; out.println ( outputLine ) ; while (( inputLine = in.readLine ()) != null ) { outputLine = kkp.processInput ( inputLine ) ; out.println ( outputLine ) ; if ( outputLine.equals ( "Bye" )) break ; } out.close () ; in.close () ; socket.close () ; } catch ( IOException e ) { e.printStackTrace () ; } } } class KnockKnockProtocol { private static final int WAITING = 0 ; private static final int SENTKNOCKKNOCK = 1 ; private static final int SENTCLUE = 2 ; private static final int ANOTHER = 3 ; private static final int NUMJOKES = 5 ; private int state = WAITING; private int currentJoke = 0 ; private String [] clues = { "Turnip" , "Little Old Lady" , "Atch" , "Who" , "Who" } ; private String [] answers = { "Turnip the heat, it's cold in here!" , "I didn't know you could yodel!" , "Bless you!" , "Is there an owl in here?" , "Is there an echo in here?" } ; public String processInput ( String theInput ) { String theOutput = null ; if ( state == WAITING ) { theOutput = "Knock! Knock!" ; state = SENTKNOCKKNOCK; } else if ( state == SENTKNOCKKNOCK ) { if ( theInput.equalsIgnoreCase ( "Who's there?" )) { theOutput = clues [ currentJoke ] ; state = SENTCLUE; } else { theOutput = "You're supposed to say \"Who's there?\"! " + "Try again. Knock! Knock!" ; } } else if ( state == SENTCLUE ) { if ( theInput.equalsIgnoreCase ( clues [ currentJoke ] + " who?" )) { theOutput = answers [ currentJoke ] + " Want another? (y/n)" ; state = ANOTHER; } else { theOutput = "You're supposed to say \"" + clues [ currentJoke ] + " who?\"" + "! Try again. Knock! Knock!" ; state = SENTKNOCKKNOCK; } } else if ( state == ANOTHER ) { if ( theInput.equalsIgnoreCase ( "y" )) { theOutput = "Knock! Knock!" ; if ( currentJoke == ( NUMJOKES - 1 )) currentJoke = 0 ; else currentJoke++; state = SENTKNOCKKNOCK; } else { theOutput = "Bye." ; state = WAITING; } } return theOutput; } } import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class KnockKnockClient { public static void main ( String [] args ) throws IOException { Socket kkSocket = null ; PrintWriter out = null ; BufferedReader in = null ; try { kkSocket = new Socket ( "taranis" , 4444 ) ; out = new PrintWriter ( kkSocket.getOutputStream () , true ) ; in = new BufferedReader ( new InputStreamReader ( kkSocket .getInputStream ())) ; } catch ( UnknownHostException e ) { System.err.println ( "Don't know about host: taranis." ) ; System.exit ( 1 ) ; } catch ( IOException e ) { System.err .println ( "Couldn't get I/O for the connection to: taranis." ) ; System.exit ( 1 ) ; } BufferedReader stdIn = new BufferedReader ( new InputStreamReader ( System.in )) ; String fromServer; String fromUser; while (( fromServer = in.readLine ()) != null ) { System.out.println ( "Server: " + fromServer ) ; if ( fromServer.equals ( "Bye." )) break ; fromUser = stdIn.readLine () ; if ( fromUser != null ) { System.out.println ( "Client: " + fromUser ) ; out.println ( fromUser ) ; } } out.close () ; in.close () ; stdIn.close () ; kkSocket.c |