/
NeonBite
/
sockets
Обзор
Документация
Войти
/
NeonBite
/
sockets
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/org/example/ChatServer.java
92 строки
3 KB
Winnie-the-Pooh2019
initial commit
01 дек 2025, 04:11
01 дек 2025, 04:11
4d20599
Код
Авторство
О чём код?
package org.example; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.net.*; import java.util.*; public class ChatServer { private static final ConfigReader configReader = ConfigReader.getInstance(); static Set<ClientHandler> clientHandlers = new HashSet<>(); private static final Logger logger = LoggerFactory.getLogger(ChatServer.class); public static void main(String[] args) { try (ServerSocket serverSocket = new ServerSocket(configReader.getPort())) { logger.info("Waiting for clients..."); while (true) { Socket socket = serverSocket.accept(); logger.info("Client connected"); ClientHandler clientHandler = new ClientHandler(socket); clientHandlers.add(clientHandler); clientHandler.start(); } } catch (IOException ex) { logger.error("Server error {}", ex.getMessage()); } } static void broadcast(String message, ClientHandler excludeUser) { // your code here } static void sendMessageToUser(String message, String username) { // your code here } } class ClientHandler extends Thread { private final Socket socket; private PrintWriter writer; private String username; private static final Logger logger = LoggerFactory.getLogger(ClientHandler.class); public ClientHandler(Socket socket) { this.socket = socket; } public void run() { try (InputStream input = socket.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); OutputStream output = socket.getOutputStream(); PrintWriter writer = new PrintWriter(output, true)) { this.writer = writer; writer.println("Enter your username:"); this.username = reader.readLine(); logger.info("Client connected with username {}", username); String text; do { text = reader.readLine(); if (text.startsWith("@")) { // processing direct message } else { logger.info("Broadcast message {} from {}", text, username); // processing broadcast message } } while (!text.equalsIgnoreCase("exit")); socket.close(); } catch (IOException ex) { System.out.println("Server exception: " + ex.getMessage()); } finally { // client disconnected } } void sendMessage(String message) { if (writer != null) { writer.println(message); } } String getUsername() { return username; } }