Initial commit

This commit is contained in:
Werner
2023-03-31 13:13:00 -03:00
commit 1026fedbab
7 changed files with 162 additions and 0 deletions

42
Source/Client.java Normal file
View File

@ -0,0 +1,42 @@
import java.io.*;
import java.net.*;
public class Client {
private Socket clientSocket;
private PrintWriter writer;
private BufferedReader reader;
public Client(String serverAddress, int serverPort) throws IOException {
clientSocket = new Socket(serverAddress, serverPort);
writer = new PrintWriter(clientSocket.getOutputStream(), true);
reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}
public void start() throws IOException {
System.out.println("Connected to server: " + clientSocket.getRemoteSocketAddress());
new Thread(() -> {
try {
String inputLine;
while ((inputLine = reader.readLine()) != null) {
System.out.println(inputLine);
}
} catch (IOException e) {
System.out.println("Error receiving message: " + e);
}
}).start();
BufferedReader stdio = new BufferedReader(new InputStreamReader(System.in));
String message;
while ((message = stdio.readLine()) != null) {
writer.println(message);
}
}
public static void main(String[] args) throws IOException {
Client client = new Client("localhost", 4321);
client.start();
}
}

84
Source/Server.java Normal file
View File

@ -0,0 +1,84 @@
import java.io.*;
import java.net.*;
import java.util.*;
public class Server {
private ServerSocket serverSocket;
private List<ClientHandler> clients;
public Server(int port) throws IOException {
serverSocket = new ServerSocket(port);
clients = new ArrayList<>();
}
public void start() throws IOException {
System.out.println("Listening on port: " + serverSocket.getLocalPort());
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket.getRemoteSocketAddress());
ClientHandler handler = new ClientHandler(clientSocket, this);
clients.add(handler);
new Thread(handler).start();
}
}
public void broadcast(String message, ClientHandler excludeClient) {
for (ClientHandler client : clients) {
if (client != excludeClient) {
client.sendMessage(message);
}
}
}
public void removeClient(ClientHandler client) {
clients.remove(client);
}
public static void main(String[] args) throws IOException {
Server server = new Server(4321);
server.start();
}
}
class ClientHandler implements Runnable {
private Socket clientSocket;
private Server server;
private PrintWriter writer;
private BufferedReader reader;
public ClientHandler(Socket clientSocket, Server server) throws IOException {
this.clientSocket = clientSocket;
this.server = server;
writer = new PrintWriter(clientSocket.getOutputStream(), true);
reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
}
public void run() {
try {
String message;
while ((message = reader.readLine()) != null) {
server.broadcast(message, this);
}
} catch (IOException e) {
System.out.println("Error handling client: " + e);
} finally {
server.removeClient(this);
try {
reader.close();
writer.close();
clientSocket.close();
} catch (IOException e) {
System.out.println("Error disconnecting: " + e);
}
}
}
public void sendMessage(String message) {
writer.println(message);
}
}