ід у систему тестування. OKПользователь доданий до списку тестованих користувачів. ULПользователь з цими даними вже увійшов в систему тестування. UNBПользователь з цими даними не зареєстрований у журналі. O "Ім'я" "Прізвище" "Група" Команда запиту виходу користувача з вказаним ім'ям, прізвищем і групою з системи тестування. OKПользователь був успішно видалений зі списку тестованих користувачів. UNНет користувача з цими даними в списку тестованих користувачів. U "Ім'я" "Прізвище" "Група" Команда запиту поновлення часу існування користувача з вказаним ім'ям, прізвищем і групою в системі тестування. OKВремя існування даного користувача в списку тестованих користувачів було поновлено. Якщо користувача не було в списку тестованих, але є в журналі, то він додається до списку поточних. UNBПользователя з цими даними взагалі немає в журналі. R "Ім'я" "Прізвище" "Група" "Назва тесту" "Оцінка" Команда запиту збереження результату тестування користувача з вказаним ім'ям, прізвищем і групою в журналі. OKРезультат був збережений. При цьому, якщо користувача не було в списку поточних користувачів, то він буде доданий. TNТест з даними назвою не зареєстрований у журналі і результат не може бути збережений. UNBНет запису даного користувача в журналі. p align="justify"> Сервер веде список тестованих користувачів, який відображається на екрані серверного вікна журналу. У цей список можуть бути додані користувачі, у разі успішної обробки запиту входу, поновлення часу існування або збереження результату. Запис про користувача буде видалена зі списку тестованих користувачів в разі отримання запиту про вихід цього користувача із системи тестування або неотримання від клієнтської програми користувача запиту про оновлення часу існування. p align="justify"> Клас форми frmMain проекту програми iTest має методи SendLogIn, SendLogOut, SendUpdate, SendResult для посилки всіх, перерахованих вище запитів серверу. У кожному з даних методів викликається метод TryToConnect, який намагається з'єднатися з сервером. Він виробляє MAX_CONNECT_TRIES або менше спроб з'єднатися з сервером. Обробка помилок з'єднання виробляється в обробнику події OnError сокета. Якщо з'єднання з сервером після всіх спроб не відбувається, то видається відповідне повідомлення користувачу. Якщо ж з'єднання відбувається, але сервер не дає відповіді на запит, то клієнт чекає відповідь протягом MAX_WAIT_TIME секунд, розриває зв'язок і намагається з'єднатися знову. Якщо клієнтові не вдалося отримати відповідь сервера після MAX_CONNECT_NOANSWER успішних спроб з'єднання без відповіді, то видаємо користувачеві повідомлення про це. p align="justify"> Отримання клієнтом відповіді сервера на запит відбувається в обробнику OnRead сокета клієнта. Тут аналізується відповідь сервера. І залежно від значення FRequestType (типу останнього запиту), проводиться реакція. Якщо відповідь відрізняється від OK, то залежно від типу запиту видаватиметьс...