- Приложение состоит из двух частей: приложения сервера и приложения клиента.
- Роль сервера унифицирована, ролей клиентов может быть несколько. Общение между сервером и клиентами происходит параллельно. Количество клиентов ограничивается физическими параметрами исполняющего оборудования.
- Начало функционирования: запуск сервера
public static void main(String[] args) throws IOException { Settings.writeToSettings("settings.txt"); log.log(server, "server is started. Let's go!"); try (ServerSocket serverSocket = new ServerSocket(Integer.parseInt(Settings.portNumberFromFile("settings.txt")))) { while (true) { ExecutorService group = Executors.newFixedThreadPool(4); group.execute(forGroup(serverSocket)); } } }
- Запуск сервера осуществляется через файл настроек
settings.txt
Он содержит номер порта и хост через пробел.
- После запуска сервера в поле чата появляется служебное сообщение сервера о том, что сервер стартовал и начал свою работу.
[Сервер #1]2023-04-21T23:09:49.121399800===server is started.Let's go!
- Далее сервер ожидает подключения клиентов.
- Подключение клиентов также осуществляется через файл настроек, через номер порта.
public static void main(String[]args)throws IOException{
Socket clientSocket=new Socket(Settings.hostFromFile("settings.txt"),
Integer.parseInt(Settings.portNumberFromFile("settings.txt")));
Thread sending=new Thread(clientSendMessage(clientSocket));
Thread getting=new Thread(clientGetMessage(clientSocket));
sending.start();
getting.start();
}
- Приложение клиента содержит два потока, один - на считывание данных, другой - на приём. Потоки могут работать параллельно друг другу.
- Далее сервер отправляет клиенту запрос об имени, для регистрации в общем чате.
What is ur name?
Maxim
- В общем чате появляются: вопрос об имени, отправленное имя и приветствие от сервера.
- Сообщение с приветствием и краткой инструкцией в ответ (сообщение №3 от сервера) также поступило подключенному клиенту.
- В ответ клиент отправляет своё сообщение, которое сервер выводит в общий чат и каждому клиенту: .
- После для прекращения подключения к серверу клиент вводит /exit, прощается и покидает чат.