Skip to content
Snippets Groups Projects
Commit 93999c4c authored by Timberlake, James (Jack) (LT)'s avatar Timberlake, James (Jack) (LT)
Browse files

HW2 w/ threading

parent f6a735ea
No related branches found
No related tags found
No related merge requests found
package MV3500Cohort2024JulySeptember.homework2.Timberlake; package MV3500Cohort2024JulySeptember.homework2.Timberlake;
import java.net.DatagramPacket; import java.io.BufferedReader;
import java.net.DatagramSocket; import java.io.InputStreamReader;
import java.net.InetAddress; import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner; import java.util.Scanner;
import java.io.PrintWriter;
/** /**
* *
* @author Jack * @author Jack
*/ */
public class Client_HW2 { public class Client_HW2 {
public static void main(String[] args) { public static void main(String[] args) {
DatagramSocket socket = null; Socket socket = null;
Scanner scanner = new Scanner(System.in); Scanner scanner = new Scanner(System.in);
try { try {
// Create a socket to communicate with the server // Create a socket to communicate with the server
socket = new DatagramSocket(); socket = new Socket("192.168.56.1", 9876); // change IP depending on server machine
InetAddress serverAddress = InetAddress.getByName("localhost"); // Server address (localhost for testing)
byte[] sendData = new byte[1024]; // Buffer to store data to send PrintWriter outputWriter = new PrintWriter(socket.getOutputStream(), true);
byte[] receiveData = new byte[1024]; // Buffer to store received data BufferedReader inputReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Receive and display server messages
System.out.println(inputReader.readLine()); // Enter name
String name = scanner.nextLine();
outputWriter.println(name); // Send name
outputWriter.flush();
System.out.print("Let's play a game!!\n"); System.out.println(inputReader.readLine()); // Enter fav color
System.out.print("Try guessing a number between 1-100\n"); String color = scanner.nextLine();
outputWriter.println(color); // Send fav color
outputWriter.flush();
// Receive and display initial messages from the server
// Empty string means init messages over
String serverMessage;
while (!(serverMessage = inputReader.readLine()).isEmpty()) {
System.out.println(serverMessage);
}
while(true) { while(true) {
System.out.print("Enter your guess: "); System.out.print("Enter your guess: ");
String guess = scanner.nextLine(); //Read user input String guess = scanner.nextLine(); //Read user input
sendData = guess.getBytes(); // Convert message to bytes outputWriter.println(guess); //Send guess to server
outputWriter.flush();
// Send guess to the server
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, 9876);
socket.send(sendPacket); // Send packet to server
// Receive response from server // Receive response from server
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); String response = inputReader.readLine();
socket.receive(receivePacket); // Blocking call until a packet is received System.out.println("Server Said: " + response); // print server response
String response = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Server Said: " + response); // Print received response
// End game
if (response.startsWith ("Good")) { if (response.startsWith ("Good")) {
break; //End the game break; //End the game
} }
...@@ -49,7 +65,11 @@ public class Client_HW2 { ...@@ -49,7 +65,11 @@ public class Client_HW2 {
scanner.close(); // Close scanner scanner.close(); // Close scanner
} }
if (socket != null && !socket.isClosed()) { if (socket != null && !socket.isClosed()) {
socket.close(); // Close the socket to release resources try {
socket.close(); // Close the socket to release resources
} catch (Exception e) {
e.printStackTrace();
}
} }
} }
} }
......
package MV3500Cohort2024JulySeptember.homework2.Timberlake;
/**
*
* @author Jack
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Random;
import java.util.HashMap;
import java.util.Map;
public class GameHandler implements Runnable {
private Socket clientSocket;
private int numToGuess;
private static final Map<String, String> userCredentials = new HashMap<>();
static {
// User credentials dictionary
userCredentials.put("Jack", "blue");
userCredentials.put("Stephen", "green");
userCredentials.put("Don", "red");
}
public GameHandler(Socket clientSocket) {
this.clientSocket = clientSocket;
Random random = new Random();
this.numToGuess = random.nextInt(100) + 1; // Initialize random number 1-100
}
@Override
public void run() {
try (BufferedReader inputReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter outputWriter = new PrintWriter(clientSocket.getOutputStream(), true)) {
// Request name from client
outputWriter.println("Enter your name:");
outputWriter.flush();
String name = inputReader.readLine();
// Request favorite color from client
outputWriter.println("Enter your favorite color:");
outputWriter.flush();
String color = inputReader.readLine();
// Check credentials and start game
// Kill connection if credentials are wrong
if (!(userCredentials.containsKey(name) && userCredentials.get(name).equalsIgnoreCase(color))) {
outputWriter.println("INTRUDER! INTRUDER! TERMINATING CONNECTION.");
clientSocket.close();
} else {
outputWriter.println("Authentication successful! Welcome, " + name + ".");
outputWriter.println("Let's play a game!!");
outputWriter.println("Try guessing a number between 1-100");
outputWriter.println(""); // Send an empty line to signal the end of initial messages
}
int count = 1;
boolean isRunning = true;
while (isRunning) {
// Read message from client
String message = inputReader.readLine();
System.out.println("Client sent: " + message); // Print received message
String response;
try {
int guess = Integer.parseInt(message.trim());
if (guess < numToGuess) {
response = "Guess Higher";
count++;
} else if (guess > numToGuess) {
response = "Guess Lower";
count++;
} else {
response = "Good Job " + name + "!! That took you " + count + " tries!";
isRunning = false;
}
} catch (NumberFormatException e) {
response = "Invalid input. Enter a number.";
}
// Send response to client
outputWriter.println(response);
}
} catch (Exception e) {
e.printStackTrace(); // Print any exceptions that occur
} finally {
try {
if (clientSocket != null && !clientSocket.isClosed()) {
clientSocket.close(); // Close the client socket to release resources
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package MV3500Cohort2024JulySeptember.homework2.Timberlake; package MV3500Cohort2024JulySeptember.homework2.Timberlake;
import java.net.DatagramPacket; import java.net.ServerSocket;
import java.net.DatagramSocket; import java.net.Socket;
import java.net.InetAddress;
import java.util.Random;
/** /**
* *
* @author Jack * @author Jack
*/ */
public class Server_HW2 { public class Server_HW2 {
public static void main(String[] args) { public static void main(String[] args) {
DatagramSocket socket = null; ServerSocket serverSocket = null;
Random random = new Random();
int numToGuess = random.nextInt(100) + 1;
//System.out.println("Magic Number Is: " + numToGuess);
try { try {
// Create a socket to listen on port 9876 // Create a socket to listen on port 9876
socket = new DatagramSocket(9876); serverSocket = new ServerSocket(9876);
byte[] receiveData = new byte[1024]; // Buffer to store incoming data
byte[] sendData = new byte[1024]; // Buffer to store outgoing data
int count = 1;
System.out.println("Server has started, waiting for client..."); System.out.println("Server has started, waiting for client...");
while (true) {
// Accept client connection
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected");
boolean isRunning = true; // Create GameHandler to handle client
while (isRunning) { GameHandler gameHandler = new GameHandler(clientSocket);
// Receive packet from client
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket); // Blocking call until a packet is received
String message = new String(receivePacket.getData(), 0, receivePacket.getLength()); //Receive packet
InetAddress clientAddress = receivePacket.getAddress(); //Save IP for response
int clientPort = receivePacket.getPort(); //Save port for response
System.out.println("Client sent: " + message); // Print received message
String response; // Create new thread to handle the game
try { Thread thread = new Thread(gameHandler);
int guess = Integer.parseInt(message.trim()); thread.start();
if (guess < numToGuess) {
response = "Guess Higher";
count++;
} else if (guess > numToGuess) {
response = "Guess Lower";
count++;
} else {
response = "Good Job!! That took you " + count + " tries!";
isRunning = false;
}
} catch (NumberFormatException e) {
response = "Invalid input. Enter a number.";
}
// Prepare response to client
sendData = response.getBytes(); // Convert response message to bytes
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
socket.send(sendPacket); // Send response packet to client
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); // Print any exceptions that occur e.printStackTrace(); // Print any exceptions that occur
} finally { } finally {
if (socket != null && !socket.isClosed()) { try {
socket.close(); // Close the socket to release resources if (serverSocket != null && !serverSocket.isClosed()) {
serverSocket.close(); // Close the server socket to release resources
}
} catch (Exception e) {
e.printStackTrace();
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment