1
Programming Assignment Unit 7
University of People
2
SIMPLE CHAT SYSTEM:
ChatServer.java:
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
private static final int PORT = 12345;
private static Set<PrintWriter> clientWriters = new HashSet<>();
public static void main(String[] args) {
System.out.println("Chat server started...");
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
while (true) {
new ClientHandler(serverSocket.accept()).start();
} catch (IOException e) {
e.printStackTrace();
private static class ClientHandler extends Thread {
3
private Socket socket;
private PrintWriter out;
private BufferedReader in;
public ClientHandler(Socket socket) {
this.socket = socket;
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
synchronized (clientWriters) {
clientWriters.add(out);
String message;
while ((message = in.readLine()) != null) {
System.out.println("Received: " + message);
synchronized (clientWriters) {
for (PrintWriter writer : clientWriters) {
writer.println(message);
}
4
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
synchronized (clientWriters) {
clientWriters.remove(out);
ChatClient.java:
import java.io.*;
import java.net.*;
5
public class ChatClient {
private static final String SERVER_ADDRESS = "localhost";
private static final int SERVER_PORT = 12345;
public static void main(String[] args) {
try (Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
BufferedReader userInput = new BufferedReader(new
InputStreamReader(System.in));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()))) {
System.out.println("Connected to chat server.");
// Thread to read messages from server
new Thread(() -> {
try {
String message;
while ((message = in.readLine()) != null) {
System.out.println("Server: " + message);
} catch (IOException e) {
6
e.printStackTrace();
}).start();
// Read user input and send to server
String userMessage;
while ((userMessage = userInput.readLine()) != null) {
out.println(userMessage);
} catch (IOException e) {
e.printStackTrace();