diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/Seventh-Assignment-Socket-Programming.iml b/.idea/Seventh-Assignment-Socket-Programming.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/Seventh-Assignment-Socket-Programming.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0af646f --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..fdc392f --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..726dafd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5d861a3 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/seventh_assignment/.gradle/8.7/checksums/checksums.lock b/seventh_assignment/.gradle/8.7/checksums/checksums.lock new file mode 100644 index 0000000..0a245ea Binary files /dev/null and b/seventh_assignment/.gradle/8.7/checksums/checksums.lock differ diff --git a/seventh_assignment/.gradle/8.7/dependencies-accessors/gc.properties b/seventh_assignment/.gradle/8.7/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/seventh_assignment/.gradle/8.7/executionHistory/executionHistory.bin b/seventh_assignment/.gradle/8.7/executionHistory/executionHistory.bin new file mode 100644 index 0000000..4d0117a Binary files /dev/null and b/seventh_assignment/.gradle/8.7/executionHistory/executionHistory.bin differ diff --git a/seventh_assignment/.gradle/8.7/executionHistory/executionHistory.lock b/seventh_assignment/.gradle/8.7/executionHistory/executionHistory.lock new file mode 100644 index 0000000..2a7345e Binary files /dev/null and b/seventh_assignment/.gradle/8.7/executionHistory/executionHistory.lock differ diff --git a/seventh_assignment/.gradle/8.7/fileChanges/last-build.bin b/seventh_assignment/.gradle/8.7/fileChanges/last-build.bin new file mode 100644 index 0000000..f76dd23 Binary files /dev/null and b/seventh_assignment/.gradle/8.7/fileChanges/last-build.bin differ diff --git a/seventh_assignment/.gradle/8.7/fileHashes/fileHashes.bin b/seventh_assignment/.gradle/8.7/fileHashes/fileHashes.bin new file mode 100644 index 0000000..58ec468 Binary files /dev/null and b/seventh_assignment/.gradle/8.7/fileHashes/fileHashes.bin differ diff --git a/seventh_assignment/.gradle/8.7/fileHashes/fileHashes.lock b/seventh_assignment/.gradle/8.7/fileHashes/fileHashes.lock new file mode 100644 index 0000000..d3faea8 Binary files /dev/null and b/seventh_assignment/.gradle/8.7/fileHashes/fileHashes.lock differ diff --git a/seventh_assignment/.gradle/8.7/fileHashes/resourceHashesCache.bin b/seventh_assignment/.gradle/8.7/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000..7d472aa Binary files /dev/null and b/seventh_assignment/.gradle/8.7/fileHashes/resourceHashesCache.bin differ diff --git a/seventh_assignment/.gradle/8.7/gc.properties b/seventh_assignment/.gradle/8.7/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/seventh_assignment/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/seventh_assignment/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 097dec8..f060791 100644 Binary files a/seventh_assignment/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/seventh_assignment/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/seventh_assignment/.gradle/buildOutputCleanup/cache.properties b/seventh_assignment/.gradle/buildOutputCleanup/cache.properties index 118b363..0fbe978 100644 --- a/seventh_assignment/.gradle/buildOutputCleanup/cache.properties +++ b/seventh_assignment/.gradle/buildOutputCleanup/cache.properties @@ -1,2 +1,2 @@ -#Thu May 16 14:28:24 PDT 2024 -gradle.version=7.5.1 +#Sun May 26 10:25:22 PDT 2024 +gradle.version=8.7 diff --git a/seventh_assignment/.gradle/buildOutputCleanup/outputFiles.bin b/seventh_assignment/.gradle/buildOutputCleanup/outputFiles.bin index 8467ea5..2ea59da 100644 Binary files a/seventh_assignment/.gradle/buildOutputCleanup/outputFiles.bin and b/seventh_assignment/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/seventh_assignment/.gradle/file-system.probe b/seventh_assignment/.gradle/file-system.probe index de6e439..901c9e2 100644 Binary files a/seventh_assignment/.gradle/file-system.probe and b/seventh_assignment/.gradle/file-system.probe differ diff --git a/seventh_assignment/.gradle/workspace-id.txt b/seventh_assignment/.gradle/workspace-id.txt new file mode 100644 index 0000000..3eb4af9 Binary files /dev/null and b/seventh_assignment/.gradle/workspace-id.txt differ diff --git a/seventh_assignment/.gradle/workspace-id.txt.lock b/seventh_assignment/.gradle/workspace-id.txt.lock new file mode 100644 index 0000000..7b40065 Binary files /dev/null and b/seventh_assignment/.gradle/workspace-id.txt.lock differ diff --git a/seventh_assignment/build/classes/java/main/sbu/cs/Client/Client.class b/seventh_assignment/build/classes/java/main/sbu/cs/Client/Client.class new file mode 100644 index 0000000..b55aff5 Binary files /dev/null and b/seventh_assignment/build/classes/java/main/sbu/cs/Client/Client.class differ diff --git a/seventh_assignment/build/classes/java/main/sbu/cs/Client/ClientHandler.class b/seventh_assignment/build/classes/java/main/sbu/cs/Client/ClientHandler.class new file mode 100644 index 0000000..c94a89e Binary files /dev/null and b/seventh_assignment/build/classes/java/main/sbu/cs/Client/ClientHandler.class differ diff --git a/seventh_assignment/build/classes/java/main/sbu/cs/Client/HandleServerResponse.class b/seventh_assignment/build/classes/java/main/sbu/cs/Client/HandleServerResponse.class new file mode 100644 index 0000000..d87ff99 Binary files /dev/null and b/seventh_assignment/build/classes/java/main/sbu/cs/Client/HandleServerResponse.class differ diff --git a/seventh_assignment/build/classes/java/main/sbu/cs/Server/Server.class b/seventh_assignment/build/classes/java/main/sbu/cs/Server/Server.class new file mode 100644 index 0000000..1c5dc48 Binary files /dev/null and b/seventh_assignment/build/classes/java/main/sbu/cs/Server/Server.class differ diff --git a/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/Client.class.uniqueId1 b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/Client.class.uniqueId1 new file mode 100644 index 0000000..b55aff5 Binary files /dev/null and b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/Client.class.uniqueId1 differ diff --git a/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/ClientHandler.class.uniqueId2 b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/ClientHandler.class.uniqueId2 new file mode 100644 index 0000000..73a1fdd Binary files /dev/null and b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/ClientHandler.class.uniqueId2 differ diff --git a/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/HandleServerResponse.class.uniqueId3 b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/HandleServerResponse.class.uniqueId3 new file mode 100644 index 0000000..b57b0ab Binary files /dev/null and b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/HandleServerResponse.class.uniqueId3 differ diff --git a/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId0 b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId0 new file mode 100644 index 0000000..1c5dc48 Binary files /dev/null and b/seventh_assignment/build/tmp/compileJava/compileTransaction/stash-dir/Server.class.uniqueId0 differ diff --git a/seventh_assignment/build/tmp/compileJava/previous-compilation-data.bin b/seventh_assignment/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000..5b3f573 Binary files /dev/null and b/seventh_assignment/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/seventh_assignment/src/main/Client/Client.java b/seventh_assignment/src/main/Client/Client.java deleted file mode 100644 index 9eebafe..0000000 --- a/seventh_assignment/src/main/Client/Client.java +++ /dev/null @@ -1,10 +0,0 @@ -// Client Class -public class Client { - // TODO: Implement the client-side operations - - // TODO: Add constructor and necessary methods - - public static void main(String[] args) { - // TODO: Implement the main method to start the client - } -} \ No newline at end of file diff --git a/seventh_assignment/src/main/Server/Server.java b/seventh_assignment/src/main/Server/Server.java deleted file mode 100644 index 37537d0..0000000 --- a/seventh_assignment/src/main/Server/Server.java +++ /dev/null @@ -1,10 +0,0 @@ -// Server Class -public class Server { - // TODO: Implement the server-side operations - - // TODO: Add constructor and necessary methods - - public static void main(String[] args) { - // TODO: Implement the main method to start the server - } -} \ No newline at end of file diff --git a/seventh_assignment/src/main/java/sbu/cs/Client/Client.java b/seventh_assignment/src/main/java/sbu/cs/Client/Client.java new file mode 100644 index 0000000..b62d39f --- /dev/null +++ b/seventh_assignment/src/main/java/sbu/cs/Client/Client.java @@ -0,0 +1,35 @@ +package sbu.cs.Client; + +import java.io.*; +import java.net.Socket; +import java.util.Scanner; + +// Client Class +public class Client { + // TODO: Implement the client-side operations + + // TODO: Add constructor and necessary methods + private static final String SERVER_IP = "127.0.0.1"; + private static final int SERVER_PORT = 3000; + + public static void main(String[] args) throws IOException { + // TODO: Implement the main method to start the client + Socket client = new Socket(SERVER_IP, SERVER_PORT); + Boolean IsInChat = false; + DataOutputStream out = new DataOutputStream(client.getOutputStream()); + //DataInputStream in = new DataInputStream(.getInputStream()); + System.out.println("Name:"); + Scanner scanner = new Scanner(System.in); + String name = scanner.nextLine(); + out.writeUTF(name); + HandleServerResponse Handle = new HandleServerResponse(client); + Thread Handlethread = new Thread(Handle); + Handlethread.start(); + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + String userInput; + while (true) { + userInput = reader.readLine(); + out.writeUTF(userInput); + } + } +} \ No newline at end of file diff --git a/seventh_assignment/src/main/java/sbu/cs/Client/ClientHandler.java b/seventh_assignment/src/main/java/sbu/cs/Client/ClientHandler.java new file mode 100644 index 0000000..ccee868 --- /dev/null +++ b/seventh_assignment/src/main/java/sbu/cs/Client/ClientHandler.java @@ -0,0 +1,140 @@ +package sbu.cs.Client; + +import sbu.cs.Server.Server; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.net.Socket; +import java.util.ArrayList; + +public class ClientHandler implements Runnable { + private Socket client; + private static ArrayList clients; + String name; + static ArrayList chat = new ArrayList<>(); + private static DataOutputStream out; + private DataInputStream in; + int n; + public ClientHandler(Socket client) throws IOException { + this.client = client; + this.clients = Server.clients; + this.in = new DataInputStream(client.getInputStream()); + this.out = new DataOutputStream(client.getOutputStream()); + } +// File directory = File.mkdirs(); + + File a_man_without_love = new File("src//main//java//sbu.cs//Server//data//a-man-without-love-ngelbert-Hmperdinck"); + File all_of_me = new File("src//main//java//sbu.cs//Server//data//all-of-me-john-legend"); + File birds_imagine = new File("src//main//java//sbu.cs//Server//data//birds-imagine-dragons"); + File blinding_lights = new File("src//main//java//sbu.cs//Server//data//blinding-lights-the-weekend"); + File dont_matter_to_me = new File("src//main//java//sbu.cs//Server//data//dont-matter-to-me-drake"); + File feeling_in_my_body = new File("src//main//java//sbu.cs//Server//data//feeling-in-my-body-elvis"); + File out_of_time = new File("src//main//java//sbu.cs//Server//data//out-of-time-the-weekend"); + File something_in_the_way = new File("src//main//java//sbu.cs//Server//data//something-in-the-way-nirvana"); + File why_you_wanna_trip_on_me = new File("src//main//java//sbu.cs//Server//data//why-you-wanna-trip-on-me-michael-jackson"); + File you_put_a_spell_on_me = new File("src//main//java//sbu.cs//Server//data//you-put-a-spell-on-me-austin-giorgio"); + @Override + public void run() { + try { + name = in.readUTF(); + } + catch (IOException e) { + throw new RuntimeException(e); + } + System.out.println(name + "connected"); + try { + //menu(); + this.out.writeUTF("1-Join the chat"); + this.out.writeUTF("2-Downloads"); + this.out.writeUTF("3-Download new file"); + this.out.writeUTF("Enter (E) whenever you want to return to the menu"); + } + catch (IOException e) { + throw new RuntimeException(e); + } + String request; + try { + while (true) { + request = this.in.readUTF(); + if (request != null) { + if (request.equals("1")) { + if (chat.size() <= 20) { + n = 0; + } else { + n = (chat.size())-20; + } + out.writeUTF("inChat"); + Chat(); + } else if (request.equals("2")) { + + } else if (request.equals("3")) { + + } + } + } + } catch (IOException e) { + // Handle any I/O exceptions that occur during communication with the client + System.err.println("IO Exception in client handler!!!!!!"); + e.printStackTrace(); + } + } + public void menu() throws IOException { + out.writeUTF("1-Join the chat"); + out.writeUTF("2-Downloads"); + out.writeUTF("3-Download new file"); + String request; + try { + while (true) { + request = this.in.readUTF(); + if (request != null) { + if (request.equals("1")) { + Chat(); + break; + } else if (request.equals("2")) { + + } else if (request.equals("3")) { + + } + } + } + } catch (IOException e) { + // Handle any I/O exceptions that occur during communication with the client + System.err.println("IO Exception in client handler!!!!!!"); + e.printStackTrace(); + } + } + public void Chat() throws IOException { + System.out.println(name + this.in.readUTF()); + out.writeUTF(" "); + out.writeUTF("Chat: "); + out.writeUTF(" "); + if (chat.size() != 0) { + for (int i = n; i < chat.size(); i++) { + out.writeUTF(chat.get(i)); + } + } + String msg; + while (true) { + msg = this.in.readUTF(); + if (msg != null) { + if (msg.equals("E")) { + out.writeUTF("E"); + menu(); + break; + } else { + String msgg = name + ": " + msg; + chat.add(msgg); + SendToAll(msgg); + } + } + } + } + private void SendToAll(String msgg) throws IOException { + for (Socket aclient : clients) { + DataOutputStream outs = new DataOutputStream(aclient.getOutputStream()); + outs.writeUTF(msgg); + } + } +} \ No newline at end of file diff --git a/seventh_assignment/src/main/java/sbu/cs/Client/HandleServerResponse.java b/seventh_assignment/src/main/java/sbu/cs/Client/HandleServerResponse.java new file mode 100644 index 0000000..8970f58 --- /dev/null +++ b/seventh_assignment/src/main/java/sbu/cs/Client/HandleServerResponse.java @@ -0,0 +1,62 @@ +package sbu.cs.Client; + +import java.io.Console; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; + + +public class HandleServerResponse implements Runnable{ + private DataInputStream in; + private DataOutputStream out; + private Socket client; + + public HandleServerResponse(Socket client) throws IOException { + this.client = client; + this.in = new DataInputStream(client.getInputStream()); + this.out = new DataOutputStream(client.getOutputStream()); + } + + @Override + public void run() { + for (int i=0; i<4; i++) { + try { + System.out.println(this.in.readUTF()); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + try { + while (true) { + String Activity = this.in.readUTF(); + if (Activity.equals("inChat")) { + out.writeUTF("is in chat"); + while (true) { + String msg = this.in.readUTF(); + if (msg.equals("E")) { +// Console console = System.console(); +// if (console != null) { +// console.clear(); +// } + for (int i=0; i<50; i++) { + System.out.println(" "); + } + for (int i=0; i<3; i++) { + System.out.println(this.in.readUTF()); + } + break; + } else { + System.out.println(msg); + } + } + continue; + } + } + } + catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/seventh_assignment/src/main/java/sbu/cs/Server/Server.java b/seventh_assignment/src/main/java/sbu/cs/Server/Server.java new file mode 100644 index 0000000..0025242 --- /dev/null +++ b/seventh_assignment/src/main/java/sbu/cs/Server/Server.java @@ -0,0 +1,51 @@ +package sbu.cs.Server; + +import sbu.cs.Client.ClientHandler; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +// Server Class +public class Server { + // TODO: Implement the server-side operations + + // TODO: Add constructor and necessary methods + + private static final int PORT = 3000; + //private static ArrayList clients = new ArrayList<>(); + public static ArrayList clients = new ArrayList<>(); + private static ExecutorService pool = Executors.newFixedThreadPool(4); + + public static void main(String[] args) throws IOException { + // TODO: Implement the main method to start the server + ServerSocket listener = new ServerSocket(3000); + try { + while (true) { + Socket client = listener.accept(); + clients.add(client); + ClientHandler clientThread = new ClientHandler(client); + pool.execute(clientThread); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + // Close the server socket when the server is shutting down + if (listener != null) { + try { + listener.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // Shutdown the thread pool to release resources + pool.shutdown(); + } + } +} \ No newline at end of file diff --git a/seventh_assignment/src/main/Server/data/a-man-without-love-ngelbert-Hmperdinck.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/a-man-without-love-ngelbert-Hmperdinck.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/a-man-without-love-ngelbert-Hmperdinck.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/a-man-without-love-ngelbert-Hmperdinck.txt diff --git a/seventh_assignment/src/main/Server/data/all-of-me-john-legend.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/all-of-me-john-legend.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/all-of-me-john-legend.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/all-of-me-john-legend.txt diff --git a/seventh_assignment/src/main/Server/data/birds-imagine-dragons.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/birds-imagine-dragons.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/birds-imagine-dragons.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/birds-imagine-dragons.txt diff --git a/seventh_assignment/src/main/Server/data/blinding-lights-the-weekend.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/blinding-lights-the-weekend.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/blinding-lights-the-weekend.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/blinding-lights-the-weekend.txt diff --git a/seventh_assignment/src/main/Server/data/dont-matter-to-me-drake.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/dont-matter-to-me-drake.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/dont-matter-to-me-drake.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/dont-matter-to-me-drake.txt diff --git a/seventh_assignment/src/main/Server/data/feeling-in-my-body-elvis.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/feeling-in-my-body-elvis.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/feeling-in-my-body-elvis.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/feeling-in-my-body-elvis.txt diff --git a/seventh_assignment/src/main/Server/data/out-of-time-the-weekend.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/out-of-time-the-weekend.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/out-of-time-the-weekend.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/out-of-time-the-weekend.txt diff --git a/seventh_assignment/src/main/Server/data/something-in-the-way-nirvana.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/something-in-the-way-nirvana.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/something-in-the-way-nirvana.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/something-in-the-way-nirvana.txt diff --git a/seventh_assignment/src/main/Server/data/why-you-wanna-trip-on-me-michael-jackson.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/why-you-wanna-trip-on-me-michael-jackson.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/why-you-wanna-trip-on-me-michael-jackson.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/why-you-wanna-trip-on-me-michael-jackson.txt diff --git a/seventh_assignment/src/main/Server/data/you-put-a-spell-on-me-austin-giorgio.txt b/seventh_assignment/src/main/java/sbu/cs/Server/data/you-put-a-spell-on-me-austin-giorgio.txt similarity index 100% rename from seventh_assignment/src/main/Server/data/you-put-a-spell-on-me-austin-giorgio.txt rename to seventh_assignment/src/main/java/sbu/cs/Server/data/you-put-a-spell-on-me-austin-giorgio.txt