From 6067cb7ebc9ee75f0f42708002d4002e40fd9e94 Mon Sep 17 00:00:00 2001
From: Chao Zhan <chao.zhan@fu-berlin.de>
Date: Wed, 21 Jun 2023 23:47:16 +0200
Subject: [PATCH] add new exercise

---
 exercises/client-server/TCPClient.java        | 37 +++++++++++++++
 exercises/client-server/TCPServer.java        | 39 ++++++++++++++++
 exercises/monitor_java/Makefile               | 22 ---------
 .../monitor_java/SynchronizedCounter.java     | 46 -------------------
 4 files changed, 76 insertions(+), 68 deletions(-)
 create mode 100644 exercises/client-server/TCPClient.java
 create mode 100644 exercises/client-server/TCPServer.java
 delete mode 100644 exercises/monitor_java/Makefile
 delete mode 100644 exercises/monitor_java/SynchronizedCounter.java

diff --git a/exercises/client-server/TCPClient.java b/exercises/client-server/TCPClient.java
new file mode 100644
index 0000000..3177b2f
--- /dev/null
+++ b/exercises/client-server/TCPClient.java
@@ -0,0 +1,37 @@
+package Client;
+
+import java.io.PrintStream;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.net.Socket;
+
+public class TCPClient {
+	public static void main(String args[]) throws IOException {
+		int PORT = 12345;
+		String HOST = "127.0.0.1";
+
+		Socket socket = new Socket(HOST, PORT);
+
+		PrintStream out = new PrintStream(socket.getOutputStream());
+
+		// BufferedReader reads Keyboard Input
+		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+		BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
+
+		while (true) { // ^D will close dialogue
+			System.out.print("> ");
+			String message = keyboard.readLine();
+			if (message == null)
+				break;
+			out.println(message);
+
+			String answer = in.readLine();
+			System.out.println("echo: " + answer);
+		}
+		in.close();
+		keyboard.close();
+		out.close();
+		socket.close();
+	}
+}
diff --git a/exercises/client-server/TCPServer.java b/exercises/client-server/TCPServer.java
new file mode 100644
index 0000000..befc248
--- /dev/null
+++ b/exercises/client-server/TCPServer.java
@@ -0,0 +1,39 @@
+package Server;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class TCPServer {
+    public static void main(String args[]) throws IOException {
+        int PORT = 12345;
+        ServerSocket listen = new ServerSocket(PORT); // set port
+        System.out.printf("Listening on the port: %d\n", PORT);
+        while (true) { // non-terminating server
+
+            Socket socket = listen.accept();
+            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+
+            PrintStream out = new PrintStream(socket.getOutputStream());
+
+            while (true) { // end of input stream will close dialogue
+
+                String message = in.readLine();
+
+                if (message == null) {
+                    break;
+                }
+
+                String answer = message.replace('i', 'o');
+                out.println(answer);
+            }
+            in.close();
+            out.close();
+            socket.close(); // close connection
+            System.out.println("Socket closed.");
+        }
+    }
+}
diff --git a/exercises/monitor_java/Makefile b/exercises/monitor_java/Makefile
deleted file mode 100644
index 530fdc8..0000000
--- a/exercises/monitor_java/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-JFLAGS = -g
-JC = javac
-JVM= java
-
-.SUFFIXES: .java .class
-.java.class:
-	$(JC) $(JFLAGS) $*.java
-
-MAIN = SynchronizedCounter
-
-CLASSES = SynchronizedCounter.java 
-
-default: classes
-
-classes: $(CLASSES:.java=.class)
-
-.PHONY: run clean
-run: $(MAIN).class
-	$(JVM) $(MAIN)
-
-clean:
-	$(RM) *.class
diff --git a/exercises/monitor_java/SynchronizedCounter.java b/exercises/monitor_java/SynchronizedCounter.java
deleted file mode 100644
index 3417640..0000000
--- a/exercises/monitor_java/SynchronizedCounter.java
+++ /dev/null
@@ -1,46 +0,0 @@
-class Count {
-  // synchronized block
-    synchronized void displayCounting(int n, int threadId) {
-        for (int i = 1; i <= n; i++) {
-            System.out.printf("Thread %d: %d\n", threadId, i);
-            try {
-                // sleep for 500 milliseconds
-                Thread.sleep(500);
-            } catch (Exception e) {
-                System.out.println(e);
-            }
-        }
-    }
-}
-
-// Thread 1
-class Thread_A extends Thread {
-    Count c;
-    Thread_A(Count c) {
-        this.c = c;
-    }
-    public void run() {
-        c.displayCounting(5, 1);
-    }
-}
-
-// Thread 2
-class Thread_B extends Thread {
-    Count c;
-    Thread_B(Count c) {
-        this.c = c;
-    }
-    public void run() {
-        c.displayCounting(5, 2);
-    }
-}
-
-public class SynchronizedCounter {
-    public static void main(String args[]) {
-        Count obj = new Count();  
-        Thread_A t1 = new Thread_A(obj);
-        Thread_B t2 = new Thread_B(obj);
-        t1.start();
-        t2.start();
-    }
-}
-- 
GitLab