The following code doesn't allow for multiple clients to connect simultaneously. Implement the Knock Knock Client/Server to now allow for multiple clients to connect to the server simultaneously....

The following code doesn't allow for multiple clients to connect simultaneously. Implement the Knock Knock Client/Server to now allow for multiple clients to connect to the server simultaneously. Client-code package com.cheggg; 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 port Number = Integer.parseInt(args[1]); try ( Socket socket = new Socket(hostname, port Number); PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true); Buffered Reader in = new Buffered Reader( new InputStreamReader(kkSocket.getInputStream())); ) { Buffered Reader string = new Buffered Reader(new InputStreamReader(System.in)); String from Server; String from User; while ((from Server = in.readLine()) != null) { System.out.println("Server: " + from Server); if (fromServer.equals("Bye.")) Break; from User = stdIn.readLine (); if (fromUser! = null) {System.out.println ("Client: " + from User); out.println (from User) ;}}} 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) ;}}} Server-code package com.cheggg; import java.net.*; import org.json.simple.parser.ParseException; import java.io.*; public class KnockKnockServer {public static void main(String[] args) throws IOException, ParseException { 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()); }}} protocol code package com.cheggg; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.HashSet; import java.util.Random; import java.util.Set; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; 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 = 5; private int state = WAITING; private int currentJoke = 0; private String[] clues ; private String[] answers ; Random random = new Random(); Set validate = new HashSet(); int index = 0;KnockKnockProtocol() throws FileNotFoundException, IOException, ParseException{ //constructor to load json data JSONParser parser = new JSONParser(); JSONArray a = (JSONArray) parser.parse(new FileReader("c:\\test.json")); System.out.println(a.size()); clues=new String[a.size()]; answers=new String[a.size()]; for (Object o : a) { JSONObject person = (JSONObject) o; String cluejson = (String) person.get("clue"); clues[a.lastIndexOf(o)]=cluejson; String answerjson = (String) person.get("answer"); answers[a.lastIndexOf(o)]=answerjson; } index=random.nextInt(clues.length); currentJoke = index; validate.add(index); } public String processInput(String theInput) { String theOutput = null; /* Add First Randomly Genrated Number To Set */ // validate. Add (Random.nextInt (clues. Length)); if (state == WAITING) {the Output = "Knock! Knock!” state = SENTKNOCKKNOCK ;} else if (state == SENTKNOCKKNOCK) {if (theInput.equalsIgnoreCase ("Who's there?")) { The Output = clues [current Joke]; state = SENTCLUE ;} else {the Output = "You're supposed to say \"Who's there? \"! “+ "Try again. Knock! Knock!";}} else if (state == SENTCLUE) {if (theInput.equalsIgnoreCase (clues [current Joke] + “who?")) { The Output = answers [current Joke] + " 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")) {the Output = "Knock! Knock!” if (current Joke == (clues. Length - 1)) {current Joke = index; } else {//System.out.println ("index:”+index) while (validate. Contains (index)) { Index = Random.nextInt (clues. Length); //System.out.println ("generated index:”+index); //index = Random.nextInt (clues. Length); validate. Add (index); Current Joke=index ;} state = SENTKNOCKKNOCK ;} else {the Output = "Bye."; state = WAITING; } } return the Output; } } test.json [{ "clue":"Turnip", "answer":"Turnip the heat, it's cold in here!" }, { "clue":"Little Old Lady", "answer”: “I didn't know you could yodel!" }, { "clue”: “etch", "answer”: “Bless you!" }, { "clue”: “Who", "answer”: “Is there an owl in here?" }, { "clue”: “Who", "answer”: “Is there an echo in here?"}]
May 19, 2022
SOLUTION.PDF

Get Answer To This Question

Submit New Assignment

Copy and Paste Your Assignment Here