Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

АВС 3 ЛР Ихсанова

.docx
Скачиваний:
0
Добавлен:
07.04.2025
Размер:
154.65 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное

образовательное учреждение высшего образования

«Уфимский университет науки и технологий»

Институт информатики, математики и робототехники

Отчёт по лабораторной работе № 3

по дисциплине «Архитектура вычислительных систем»

на тему: «Основы сетевого программирования. Многопоточная обработка сокет соединений»

Выполнил:

студентка группы ПРО-332б Ихсанова Э. А.

Проверил:

преподаватель Юдинцев Б. С.

Уфа – 2024

Цель работы и задачи

  1. Изучить примеры кода с реализацией многопоточного сокет-сервера и клиента (см. файлы в архиве lab3_ПРИМЕР.zip).

  2. Добавить в сокет-сервер следующие функции:

  • Проверка уникальности имени клиента при подключении (если имя повторяется, то отправить клиенту соответствующее сообщение об ошибке).

  • Поименная адресация сообщений (если пользователь не найден, то вывод сообщения об ошибке).

  • Добавить в класс сокет-соединения функцию записи всех сообщений пользователей в общий log-файл.

  1. Запустить сокет-сервер на ВМ (должна быть создана в процессе выполнения лабораторной работы №2). Проверить обмен сообщениями между несколькими клиентскими приложениями через сокет-сервер, приложить скриншоты (демонстрирующие работу добавленных функций) к отчету.

Ход работы

В первую очередь в код программы была добавлена функция проверки уникальности имени пользователя.

def check_username(data_from): if data_from in USERNAME_TO_THREAD: error_msg = json.dumps( {'to': data_from, 'from': 'SERVER', 'text': 'Username already taken. Please choose a different username.'}) return False, error_msg else: return True, None

Так же была добавлена функция для логирования сообщений в файл messages.txt, который хранится в директории программы и может быть открыт любым удобным образом.

def log_message(username, message): with open(LOG_FILE, 'a') as file: file.write(f"{username}: {message}\n")

В последнюю очередь была реализована функция для отправки поименных(личных) сообщений от пользователя к пользователю.

def send_to_user(self, text, username): msg = json.dumps({'to': username, 'from': self.username, 'text': text}) if username in USERNAME_TO_THREAD: USERNAME_TO_THREAD[username].connection.send(msg.encode('utf-8')) else: print(f"User {username} is not online.")

Проверка работоспособности добавленных функций:

  1. Проверка уникальности имени:

Р исунок 1 – Подключаемся под именем Elina.

Рисунок 2 - Еще раз подключаемся под тем же именем

При попытке войти под уже занятым именем, получаем сообщение Username already taken. После чего идет отключение от сервера.

  1. Отправка личных сообщений:

Рисунок 3 – Личные сообщения

Как можно видеть на изображении, при добавлении в начале сообщения имени пользователя в квадратных скобочках ([elina] …) можно отправлять личные сообщения.

  1. Запись в лог-файл:

В директории программы появился файл messages.txt, содержащий в себе все отправленные сообщения.

Р исунок 4 – файл messages.txt в директории программы

Рисунок 5 – Сохраненные сообщения

Вывод:

В ходе лабораторной работы была изучена тема многопоточности и ее реализация на языке python. На многопоточный сервер были добавлены функции проверки уникальности имени пользователя, отправки личных сообщений, а также записи всех сообщений в лог файл.

1

Соседние файлы в предмете Архитектура вычислительных систем