Skip to content
Snippets Groups Projects
Commit ae645a71 authored by Brutzman, Don's avatar Brutzman, Don
Browse files
parents fe4cf864 93999c4c
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