Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I am in need of help with the following I have added the class below that I am supposed to base my work on. I

I am in need of help with the following

I have added the class below that I am supposed to base my work on. I need to modify the following classes in order that each server thread maintains an instant message conversation with one client. I need the program to allow input of a name from the multiple threads, in order for the server side to display both who sent the message and the message itself.

For example. The program(server) connects two people(clients) together, once connected the program displays that both people have been connected and proceeds to ask each person for their name. User 1 for example would be Lucy and User 2 name would be John. Lucy then inputs a message for example "hello" now the server side displays both the message and who sent the message itself for example "Lucy: hello" This will also be the same thing for John as he will type back hello and it will also read "John: hello" this goes on and both Lucy and John can carry a conversation of whatever it is they talk about until one of them types "/disconnect" and the program closes altogether. The Program needs to be in JAVA, I not only need the code but I need steps for what to do, I will downvote if I only receive code and no explanation AND THE CLASSES I HAVE ARE NOT USED. I need to use the following classes as that is what I have to base this program off of. This isn't something from scratch.

MULTI SERVER CLASS

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

public class KKMultiServer { public static void main(String[] args) throws IOException {

if (args.length != 1) { System.err.println("Usage: java KKMultiServer "); System.exit(1); }

int portNumber = Integer.parseInt(args[0]); boolean listening = true; try (ServerSocket serverSocket = new ServerSocket(portNumber)) { while (listening) { new KKMultiServerThread(serverSocket.accept()).start(); } } catch (IOException e) { System.err.println("Could not listen on port " + portNumber); System.exit(-1); } } }

MULTI-SERVER THREAD CLASS

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

public 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(); } } }

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 = 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; } }

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]);

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); } } }

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

Databases Demystified

Authors: Andrew Oppel

1st Edition

0072253649, 9780072253641

More Books

Students also viewed these Databases questions

Question

What qualities do you see as necessary for your line of work?

Answered: 1 week ago