Курсовая работа (Задание):
Разработка клиент-серверного приложения для обмена файлами на языке программирования Java.
Вступление
Для того, чтобы иметь возможность передавать файлы между клиентом и сервером, существует протокол TCP/IP.
TCP – протокол управления передачей. Он служит для обеспечения и установление надежного соединения между двумя устройствами и надежную передачу данных. При этом протокол TCP контролирует оптимальный размер передаваемого пакета данных, осуществляя новую посылку при сбое передачи.
IP – интернет протокол или адресный протокол – основа всей архитектуры передачи данных. Протокол IP служит для доставки сетевого пакета данных по нужному адресу. При этом информация разбивается на пакеты, которые независимо передвигаются по сети до нужного адресата.
Постановка задачи
Задачей проекта является разработка клиент-серверного приложения для обмена файлами на языке программирования Java.
Цели и функции приложения:
- Многопоточный сервер
- Удобный и понятный интерфейс клиента
- Работа с базой данных MySQL
- Создание приватных комнат для обмена файлами
- Информационное окно с логированием действий приложения
- Поддержка архивации выбранным клиентом файлов
- Поддержка передачи и приёма архивов с файлами
Содержание отчета к программе
В отчете находятся все необходимые диаграммы к нашей программе, такие как:
- Схема работы стороны сервера и клиента
- Диаграмма Usecase
- Диаграмма Statechart
- Диаграмма Sequence
- Диаграмма ООП классов
Также, присутствуют все скриншоты с описанием каждого действия пользователя в программе.
Как мы можем увидеть из сриншота, в пояснительной записке содержится 27 страниц.
Описание архитектуры приложения
На рисунке 1 представлена схема работы, которая показывает, как работает наша программа на стороне сервера и клиента.
рисунок 1
Для гибкости разработки программы будем взаимодействовать с объектно-ориентированным программированием. На рисунке 2 представлена UML диаграмма классов на стороне сервера.
рисунок 2
На рисунке 3 представлена UML диаграмма классов на стороне клиента.
рисунок 3
Пример исходного кода
/** * Метод отсылает данные клиенту в новом потоке * Метод Находит данные в своей папке(dirServer) * Если они совпадают с теми, что хочет скачать * пользователь, то отсылаем, иначе * таких файлов нет или ошибка * @param _nameFileFromClient * @throws java.lang.InterruptedException */ public void sendFilesToClient(String _nameFileFromClient) throws InterruptedException { // создаем новый поток // чтобы иметь возможность, использовать его ниже в run() Socket sockClient = this.sock; Thread threadSendFileToClient = new Thread(() -> { // был ли найден файл boolean find_file = false; try { // получаем все файлы из папки сервера(dirServer) File dir = new File(dirServer + System.getProperty("file.separator")); File[] files = dir.listFiles(); for (File fileName : files) { if (fileName.getName().equals(_nameFileFromClient)) { try (FileInputStream fis = new FileInputStream(dirServer + System.getProperty("file.separator") + _nameFileFromClient)) { byte[] buffer = new byte[8192]; dos.writeUTF(fileName.getName()); dos.writeLong(fileName.length()); int read; // читаем файл кусками и передаем while ((read = fis.read(buffer)) > 0) { dos.write(buffer, 0, read); } find_file = true; } dos.flush(); break; } } if (!find_file) { pw.println("Не было найдено на сервере..."); pw.println(_nameFileFromClient); } else { pw.println("Успех"); pw.println(_nameFileFromClient); } } catch (Exception e) { pw.println("Ошибка передачи данных с сервера на клиент..."); System.out.println(sockClient.getInetAddress() + ": Ошибка " + "-ПЕРЕДАЧА ДАННЫХ КЛИЕНТУ-"); pw.println(_nameFileFromClient); } }); threadSendFileToClient.start(); threadSendFileToClient.join(); // ждем выполнения потока threadSendFileToClient }
Руководство пользователя
Поскольку наше приложение по архитектуре клиент-сервер, то в первую очередь нам нужно запустить сервер, который в свою очередь открывает локальное соединение и работает на порту 8030. На рисунке 4 приведена форма сервера.
рисунок 4
Рассмотрим сторону клиента, главная форма клиентского приложения представлена на рисунке 5.
рисунок 5
Скриншот архива с проектом
Содержание архива
- Исходный код клиентского приложения
- Исходный код серверного приложения
- Отчет с 27 страницами + бонус презентация со скриншотами к проекту
- Pictures - картинки с описания программы со studlearn
Alekseev