Question: Hello I need help with the following. Below I have added some classes. I need to modify these classes inorder that the client and server

Hello I need help with the following.

Below I have added some classes. I need to modify these classes inorder that the client and server takes turn exchanging string messages until someone says bye and therfore the program ends. Either the client or server can end it just by saying bye. The program has to displaya prompt to indicate whos turn it will be. Either Client or servers turn. Please I need a step by step solution to this and the code needed to puit this together. The classes I have below have to be used for this program, these classes are from a pervious program that I have to base this new program off of Reminder this has to be in JAVA Again I cant strees this enough I need some detailed help not just the code but also steps, I will downvote if I only just get code and no explanation.

PROTOCOL CLASS

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

public 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 = 6;

private int state = WAITING; private int currentJoke = 0;

private String[] clues = { "Cargo", "Turnip", "Little Old Lady", "Atch", "Who", "Who" }; private String[] answers = {"No, car go beep beep!" , "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; } }

SERVER CLASS

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

public class KnockKnockServer { public static void main(String[] args) throws IOException { if (args.length != 1) { System.err.println("Usage: java KnockKnockServer "); System.exit(1); }

int portNumber = Integer.parseInt(args[0]);

try ( ServerSocket serverSocket = new ServerSocket(portNumber); Socket clientSocket = serverSocket.accept(); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); ) { String inputLine, outputLine; // Initiate conversation with client 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; } } catch (IOException e) { System.out.println("Exception caught when trying to listen on port " + portNumber + " or listening for a connection"); System.out.println(e.getMessage()); } } }

CLIENT CLASS

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

public class KnockKnockClient { public static void main(String[] args) throws IOException { if (args.length != 2) { System.err.println( "Usage: java EchoClient "); System.exit(1); }

String hostName = args[0]; int portNumber = Integer.parseInt(args[1]); //The client side initiates a connection request and identifies the port number from the server and the hose name try ( Socket kkSocket = new Socket(hostName, portNumber);//Receieves message from server PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true);//Prints messaeg to server BufferedReader in = new BufferedReader( new InputStreamReader(kkSocket.getInputStream())); ) { BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));//Reads message from clinet String fromServer;//Reads response from client String fromUser;//sends response to server

while ((fromServer = in.readLine()) != null)//Sends response { System.out.println("Server: " + fromServer);//Prints message if (fromServer.equals("Bye.")) break; fromUser = stdIn.readLine(); if (fromUser != null) { System.out.println("Client: " + fromUser); out.println(fromUser); } } } catch (UnknownHostException e) { System.err.println("Don't know about host " + hostName); System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to " + hostName); System.exit(1); } } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!