Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

The following code doesn't allow for multiple clients to connect simultaneously.Implement the KnockKnock 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 portNumber = Integer.parseInt(args[1]); try ( Socket kkSocket = new Socket(hostName, portNumber); PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(kkSocket.getInputStream())); ) { 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); } } } 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) {

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 == (clues.length - 1)){

currentJoke = 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);

currentJoke=index;

}

state = SENTKNOCKKNOCK;

} else {

theOutput = "Bye.";

state = WAITING;

}

}

return theOutput;

}

}

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":"Atch",

"answer":"Bless you!"

},

{

"clue":"Who",

"answer":"Is there an owl in here?"

},

{

"clue":"Who",

"answer":"Is there an echo in here?"

}]

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Concepts

Authors: David Kroenke, David Auer, Scott Vandenberg, Robert Yoder

8th Edition

013460153X, 978-0134601533

More Books

Students also viewed these Databases questions

Question

How do Excel Pivot Tables handle data from non OLAP databases?

Answered: 1 week ago