Вход

Разработка системы синхронизации журналов банкоматов и обновления интерфейса

Рекомендуемая категория для самостоятельной подготовки:
Дипломная работа*
Код 291993
Дата создания 01 июля 2014
Страниц 66
Мы сможем обработать ваш заказ 6 октября в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
3 330руб.
КУПИТЬ

Описание

В тексте работы вырезаны названия фирмы заказчика и некоторые изображения указывающие на него. Работа была признанной самой сильной на потоке из 25 человек экзаменующихся, оценена на "отлично" всеми членами комиссии. К работе не прикреплен файл с презентацией.
Данную работу можно оень легко переписать под иные системы взаимодействия двух систем типа Клиент-Сервер. ...

Содержание

Аннотация 7
1.Введение. 8
2.Постановка задачи. 10
3.Выбор средств реализации. 11
4.Проектирование системы синхронизации журналов банкоматов. 15
5.Проектирование системы, поддержания актуальности визуального интерфейса пользователей. 20
6.Реализация программного обеспечения систем синхронизации и обновления интерфейса. 24
7.Обеспечение информационной безопасности при синхронизации данных. 46
8.Тестирование программного обеспечения. 47
9.Заключение. 50
10.Список литературы. 51
11. Приложения. 52

Введение

1. Введение.

В эру быстрого развития электронных технологий и электронного документооборота, многие ожидали переход к "электронным деньгам" и платежным системам, и во многом эти ожидания оправдались. Уже давно приводились доводы, что «электронные деньги» и безналичные платежи являются более удобными для конечного пользователя, более и безопасными. Но не все оказалось столь быстрым и надежным на практике. Всем ясны достоинства «электронных денег», однако при всех достоинствах, данные системы не в состоянии полностью вытеснить наличные деньги. Помимо самих денег, существуют услуги Банков по вкладам, депозитам, кредитам, зарплатные проекты и прочее. Для этих целей выпускались устройства самообслуживания для клиентов и банковские карты.
Пластиковая карта — пластина стандартных размеров (54x86 x0,76мм) (кроме SIM-карт и т.п., имеющих обычно значительно меньшие размеры), изготовленная из специальной, устойчивой к механическим и термическим воздействиям пластмассы, различающиеся по своему назначению, функциональным и техническим характеристикам. [1]

Пластиковая карта позволяет оперативно, практически в большинстве стран мира, совершить покупку пли получить наличные деньги, практически в любое время суток. Большинство людей, в частности граждане России, предпочитают использовать банковские карты для снятия наличных в банкоматах, а не как платежное средство.
Исходя из выше написанного, можно сделать простой вывод: роль «электронных денег» и средств их использования и обналичивания денежных средств – имеют очень большую роль в жизни каждого человека с пластиковой картой и населения в целом. Именно поэтому стоит отдельно рассмотреть вопрос обслуживания и контроля самой распространенной системы работы с финансами – банкоматы.
Банкомат (от банковский автомат, иногда ATM от англ. Automated teller machine) — программно-технический комплекс, предназначенный для автоматизированных выдачи и приёма наличных денежных средств, как с использованием платёжных карт, так и без, а также выполнения других операций, в том числе оплаты товаров и услуг, составления документов, подтверждающих соответствующие операции.[1]
Банкоматы бывают 2 видов: с функцией приема наличных и без нее.


Роль банкомата в «жизни денег» очень велика, многие сталкивались с проблемой финансов и дальнейший поиск банкомата по городу. Однако даже найти банкомат не достаточно, банкомат должен еще и работать. Работоспособность банкомата обусловлена, как и все прочее «железа», его техническими характеристиками и программным обеспечением. Для поддержания банкомата в рабочем состоянии существуют множество сервисных центров, банковские отделы банковского оборудования и прочее.
Для банков и финансовых организаций, банкомат играет не меньшее значение, чем для потребителя. Банкомат для банков это средство рекламы, средство контроля и возможность привлекать клиентов. Банк, не имеющий банкоматов, заключает договора со сторонними банками и платит им комиссию за услуги, так как банк без банкоматов – не Банк. Клиент может не только пользоваться банкоматом как кошельком, но и может узнать информацию от своего или стороннего банка. Наверно многие замечали, что банкоматы с годами становятся все более красочными и яркими. Рекламные строки, сменяющиеся картинки и даже видеоролики никого не удивляют. Реклама – двигатель прогресса и средство доставки информации до конечного пользователя.

Для клиентов же важно чтобы банкомат находился в близости от его места жительства или работы, чтобы банкомат всегда имел в себе наличные деньги. Но есть еще один факт, про который мало кто вспоминает, пока не столкнется с этим – защищенность пользователя. Мошенники и технические сбои часто вредят не Банку, а конечному пользователю, клиенту. Клиент может получить не всю сумму денег, хотя со счета будет списано все. Банкомат с функцией приема наличных может взять деньги, но не занести их на счет. И за всем этим нужно постоянно следить и обнаруживать подобные ошибки.
Помимо технических сбоев существуют мошенники и способы обмануть систему. Самые распространенные способы мошенничества:
1. Использование украденной карты и ПИН-кода, разглашённого держателем (в том числе случаи, когда ПИН-код хранится рядом с картой или записывается на ней).
2. «Дружественное мошенничество». Использование карты путём свободного доступа членами семьи, близкими друзьями, коллегами по работе. Также предполагает разглашение ПИН-кода.
3. Подглядывание ПИН-кода из-за плеча с последующей кражей карты — простейший, но широко распространённый метод.
4. «Ливанская петля». Блокируется окно подачи карты так, чтобы карта застряла. При попытке вставить карту в банкомат она застревает. Злоумышленник, предварительно подсмотревший ПИН-код, сочувствует и рекомендует срочно идти и звонить в банк или сервисную службу. Как только владелец отходит, преступник извлекает карту, освобождает окно банкомата и снимает деньги.
5. Копирование магнитной полосы (skimming) с помощью подставных устройств считывания. Такие устройства устанавливают на банкомат (считыватель — на щель для приёма карты, дополнительной клавиатурой накрывают настоящую). При пользовании таким банкоматом считыватель сохраняет данные с вставляемых в банкомат карт, а клавиатура — ПИН-коды. Как и в предыдущем случае, украденных данных достаточно для производства дубликата карты и снятия денег со счёта владельца.
6. Ложный ПИН-ПАД (устройство для ввода ПИН-кода в платёжных терминалах), либо дополнительный элемент на электронном замке в помещении с банкоматом, открываемом с помощью карты.
7. Установка рядом с банкоматом миниатюрных телекамер для воровства ПИН-кодов. Такая камера может быть замаскирована установленным рядом или прикреплённым к банкомату или стене рядом с ним предметом.[1]
Рассматривая данные способы обмана можно сразу заметить, что первые три способа это работа с самим человеком с дальнейшей кражей денег. В этих способах банк не несет ответственности за украденные средства клиента. Но вот остальные способы фиксируются системой и входят в круг сервисного обслуживания банка, в дальнейшем эти способы могут быть расшифрованы (раскрыты) и приобщены к расследованию полиции. А банк может возместить украденные средства клиенту.
Однако в этой картине есть серьезный изъян. После работы злоумышленники могут испортить устройство банкомата или средства его связи с банком, что усложнит работу сервиса или растянет сроки расследования.
Все вышерассмотренное указывает на важность выбранной темы: Разработка системы синхронизации журналов банкоматов и обновления интерфейса. Синхронизация журналов банкомата необходима для обеспечения работы банкомата и выявления проблем в его работе. А для работы с клиентами и актуализации данных – необходим интерфейс и его актуальность.

Фрагмент работы для ознакомления

Заказчик планирует запуск данного скрипта ежедневно, то есть один раз в день. Несмотря на небольшие размеры файлов, в банке есть группа банкоматов пользующих услуги связи сторонних провайдеров, в связи с этим скорость их передачи достаточно низка, и даже передача файла логов размером в полтора мегабайта может затянуться на три минуты. Поэтому все запланированные сеансы связи назначены на ночное время.Полезность данного блока работы имеет значение для будущего каждого банкомата. После того как банкомат выходит из эксплуатации, с него необходимо снимать все логии и журналы его работы. При данной разработке, этой операцией можно не заниматься, так как банкомат до конца своей службы будет отсылать свои журналы на сервер.Схема работы клиентской части программы:Схема 3. Функциональная схема клиентской части программыВ схеме 2 не указаны некоторые моменты, например: создание файла журнала работы программы, запись в журнал, ошибки и успешные отправки файлов. Но для общего понимания требований все достаточно понятно. Взаимодействие блоков программы сводится к простой схеме по поиску ошибок и в случае их отсутствия работать. Для начала программа проверяет все основные моменты на предмет ошибок поочередно, и только после этого приступает к передаче файлов. Однако ошибка при удалении файла – не повод прекратить работу, поэтому эта информация заносится в лог файл клиентской части программы и программа отправляет следующий файл, если это возможно. Если же происходит ошибка открытия файла логов, пересылка файлов будет произведена в любом случае, просто не будет записей в логах. Это обусловлено важностью передачи файлов, а не запись информации о передачи.При потере связи с сервером, программа не успевшая переслать файл – переходит в режим повторного подключения и вновь ожидает своей очереди с интервалом в одну минуту. После восстановления связи, файл будет отправлен повторно. В заключении можно сказать, что полезность данной разработки не вызывает сомнения. Заказчик планирует запустить разработку к концу данного года в эксплуатацию по всем банкоматам страны. Проектирование системы, поддержания актуальности визуального интерфейса пользователей.Актуализация визуального оформления банкомата, а конкретно изображений на экране банкомата не имеет смысла как отдельная часть программы по синхронизации, поэтому она будет добавлена в ранее описанную клиентскую часть.После выполнения клиентской части программы по отправке файлов на сервер, программа не отключается, а меняется местами с сервером – то есть готовиться к приему файлов от серверной части программы.После отработки, программа обновит старое изображение или иной файо медиа и на экране банкомата появиться обновленное изображение (см рис. 4).Для серверной части нужно будет передать отдельный параметр с указанием каталога, где находятся файлы для интерфейсов банкоматов, для простоты этой передачи, можно заносить их в архив. Для исключения повторной отправки файлов, сервер будет вести журнал, где будет отмечать банкоматы уже получившие файлы. В этом случае банкомат, не получивший обновления, получит его при ближайшем сеансе связи. А обновленные не будут получать их повторно.При следующем обновлении, достаточно будет заменить архив с файлами и затереть или удалить журнал отправки, далее все будет происходить автоматически.Данный подход лишь немного меняет скрипт командной строки Windows, где будет указано место распаковки файлов в случае их получения.Функциональную схему данного блока можно посмотреть на рисунке 3 приведенном ниже.Сервер: -------------------------------------------------------------------------------- Банкомат: ------------------------------------------------------------------------------Схема 4. Функциональная схема работы блока обновления интерфейса.Рис. 1 Пример обновленного интерфейса банкоматаСкрипт cmd/bat после получения сигнала о завершении работы скрипта продолжит свою работу. Проверив, не поступил ли новый файл в указанный каталог, скрипт завершит работу. В случае получения файла, скрипт разархивирует его и поместит в каталог медиа-файлов банкомата для обновления интерфейса банкомата. Програмное обеспечение не заменит файлы моментально, а только при перезапуске программы, так как файлы с изображением копируются при включении и не изменятся до перезапуска. Для решения этой проблемы подходит стандартное решение ФО ЦФТ, где указывается, что делать программному обеспечению:при загрузке скрипта; при неуспешном выполнении скрипта;при успешном завершении скрипта.Здесь появляются варианты настройки, с одной стороны перезапускать программное обеспечение при каждом сеансе связи с банкоматом не очень хорошо, но с другой стороны нет необходимости провоцировать ошибку работы скрипта для попадания в пункты №2 и №3. Заказчик планирует запускать программу синхронизации и обновления один раз в сутки, поэтому вариант перезапускать программное обеспечение при каждом сеансе связи для нас не проблема, тем более что при самом плохом варианте программа не отняла от рабочего времени более 5 минут. Однако в ином случае, нужно усмотреть два варианта работы скрипта (завершение с ошибкой и без), и оптимизировать процесс обновления согласно работе ФО.Реализация программного обеспечения систем синхронизации и обновления интерфейса.Для реализации всей дипломной работы, а именно первой ее части «Синхронизация журналов банкоматов», будет достаточно создать 4 исходных файла и полный набор библиотеки boost. Таким образом два файла будут выступать как вспомогательные, а два оставшихся как компиляционные.По результатам работы, проб и ошибок, в работе появились следующие файлы:Client.hppClient.cppServer.hppSerrver.cppПосле компиляции данных файлов мы получили на выходе два действующих исполняющих файла, которые не содержат тайной информации. Данные файлы «самодостаточны» и не требуют дополнительных библиотек или вспомогательных файлов, вся их работа зависит от внесенных в них параметров при запуске.Однако для полной работы им необходимы команды запуска, как на стороне сервера, так и на стороне банкомата или клиента.Для банкоматов использующих средства ФО от ЦФТ создается скрипт для запуска приложения и дополнительных действий с журналами и архивами. Для удобства назовем его просто [email protected] offset VDATE=%date%rem Получение датыset now=%DATE: =0%IF NOT EXIST C:\atm\Arhiv (md C:\atm\Arhiv) rem Проверка каталога архивовfor /f "tokens=1-7 delims=/-:., " %%a in ( "%now%" ) do (set now=%%c%%b%%a rem Форматирование даты по образцу ГГГГММЧЧ)set datatime=%now:~-6%set mont=%now:~4,2%for /l %%c IN (1 1 9) DO ( rem Цикл 10 чисел месяцаIF EXIST C:\atm\log\*%now:~2,4%0%%c.log (rem Проверка наличие логовIF NOT EXIST C:\atm\Arhiv\DUB\%now:~2,4%0%%c.zip (rem Проверка повторной архивацииIF %now:~2,4%0%%c==%datatime% (GOTO out)"C:\Program Files\7-Zip\7z.exe" a C:\atm\Arhiv\%now:~2,4%0%%c.zip rem Архивирование "C:\atm\log\*%now:~2,4%0%%c.log"XCOPY C:\atm\Arhiv\%now:~2,4%0%%c.zip C:\atm\Arhiv\DUB\ rem Копирование архивов)))for /l %%b IN (10 1 31) DO (rem Цикл 21 чисел месяцаIF EXIST C:\atm\log\*%now:~2,4%%%b.log (IF NOT EXIST C:\atm\Arhiv\DUB\%now:~2,4%%%b.zip (IF %now:~2,4%%%b==%datatime% (GOTO out)"C:\Program Files\7-Zip\7z.exe" a C:\atm\Arhiv\%now:~2,4%%%b.zip "C:\atm\log\*%now:~2,4%%%b.log"XCOPY C:\atm\Arhiv\%now:~2,4%%%b.zip C:\atm\Arhiv\DUB\))):outfor /l %%b IN (1 1 9) DO (rem Цикл поиска прошлого месяцаIF %mont%==0%%b (set dd=0%pp%GOTO feil)set pp=0%%b)set pp=10for /l %%z IN (10 1 12) DO (IF %mont%==%%z (set dd=%pp%GOTO feil)set pp=%%z):feilfor /l %%b IN (15 1 31) DO (rem Цикл 15 чисел прошлого месяцаIF EXIST C:\atm\log\*%now:~2,2%%dd%%%b.log (IF NOT EXIST C:\atm\Arhiv\DUB\%now:~2,2%%dd%%%b.zip (IF %now:~2,2%%dd%%%b==%datatime% (GOTO out)"C:\Program Files\7-Zip\7z.exe" a C:\atm\Arhiv\%now:~2,2%%dd%%%b.zip "C:\atm\log\*%now:~2,2%%dd%%%b.log"XCOPY C:\atm\Arhiv\%now:~2,2%%dd%%%b.zip C:\atm\Arhiv\DUB\)))For %%a in (C:\ХХХХХХ\*.lic) do ( set Jishka=%%~na ) rem Вычисление номера банкоматаset Jish=%Jishka:~1,6% echo %Jishka:~1,6%start C:\client.exe 22.176.76.50 7070 %Jishka:~1,6% C:\atm\Arhiv\*.zip rem Запуск программыPOPDExit rem Завершение работыДанный скрипт предназначен для первой редакции программы: синхронизации и архивации файлов. В нем не предусмотрены варианты обмена данными для обновления интерфейса. Измененный файл находится во второй части главы.Client.hpp#include <cstdio>#include <cstring>#include <fstream>#include <iostream>#include <string>#include <boost/array.hpp>#include <boost/asio.hpp>#include <boost/chrono.hpp>#include <boost/filesystem.hpp>#include <boost/lexical_cast.hpp>#include <boost/thread.hpp>using std::cout;using std::cerr;using std::endl;using std::exception;using std::ifstream;using std::ofstream;using std::string;using boost::array;using boost::asio::ip::tcp;class Client {const string server_ip_address;const unsigned server_port;const unsigned client_number;boost::filesystem::path file_path;boost::filesystem::path log_file_path;static const unsigned buffer_size = 65536;static const unsigned short max_filename_length = 260;array<char, max_filename_length> file_name_buffer;array<char, buffer_size> buffer;boost::asio::io_service io_service;boost::system::error_code error;ifstream file;ofstream logfile;string current_time();void send_filename(tcp::socket &socket);void send_client_number(tcp::socket &socket);void send_file(tcp::socket &socket);void write_log();public:Client(const string &serverIpAddress, const unsigned serverPort, const unsigned clientNumber, const string &fileName);void run();};Данный файл предназначен для первой редакции программы: синхронизации и архивации файлов. В нем не предусмотрены варианты обмена данными для обновления интерфейса. Измененный файл находится во второй части главы.Client.cpp#include "client.hpp"/*Конструктор клиента. Инициализация всех нужных клиенту переменных перед его запуском. */Client::Client(const string &serverIpAddress, const unsigned serverPort, const unsigned clientNumber, const string &fileName):server_ip_address(serverIpAddress),server_port(serverPort),client_number(clientNumber),file_path(fileName),log_file_path("log.txt") {}/*Запуск клиента */void Client::run() {// Подключаем сокет к главному объекту boost::asiotcp::socket socket(io_service);// Соединяемся с серверомsocket.connect(tcp::endpoint(boost::asio::ip::address::from_string(server_ip_address), server_port));// Открываем файл для отправкиfile.open(file_path.string().c_str(), std::ios::in|std::ios::binary);// Если не получилосьif(!file) {// Пишем логwrite_log("Невозможно открыть файл: " + file_path.string());// Закрываем соединениеsocket.close();// Возвращаемся из функции run() в main()return;}// Отправляем номер клиентаsend_client_number(socket);// Если возникла ошибкаif(error) {write_log("Ошибка при отправке номера клиента.");socket.close();return;}// Посылаем имя файлаsend_filename(socket);if(error) {write_log("Ошибка при отправке имени файла.");file.close();socket.close();return;}// Посылаем содержимое файлаsend_file(socket);if(error) {write_log("Ошибка при отправке файла.");file.close();socket.close();return;}write_log("Файл " + file_path.string() + " успешно отправлен на сервер.");file.close();if(remove(file_path.string().c_str())) {write_log("Невозможно удалить файл " + file_path.string());}socket.close();}void Client::send_client_number(tcp::socket &socket) {// Создаем буфер, который будет содержать номер клиентаboost::array<unsigned, 1> number;// Сохраняем номер в буферnumber[0] = client_number;// Отсылаем буферboost::asio::write(socket, boost::asio::buffer(number), boost::asio::transfer_all(), error);}void Client::send_filename(tcp::socket &socket) {// Копируем имя файла в буферstrcpy(file_name_buffer.data(), file_path.filename().string().c_str());// Отсылаем буферboost::asio::write(socket, boost::asio::buffer(file_name_buffer, max_filename_length), boost::asio::transfer_all(), error);}void Client::send_file(tcp::socket &socket) {// Читаем куски файла в буфер пока не дойдем до конца файла (eof == end of file)while(!file.eof()) {// Очищаем буфер от мусораbuffer.assign(0);// Читаем кусок файла в буферfile.read(buffer.data(), buffer_size);// Узнаем, сколько байтов считалиunsigned int len = file.gcount();// Отсылаем буферboost::asio::write(socket, boost::asio::buffer(buffer, len), boost::asio::transfer_all(), error);}}void Client::write_log(const string &message) {string time = current_time();logfile.open(log_file_path.string().c_str(), std::ios::app|std::ios::out);if(!logfile) {cerr << "Невозможно открыть файл " << log_file_path.string() << endl;return;}logfile << time << ": " << message << endl;logfile.close();}string Client::current_time() {time_t time = std::time(0);char date_time[64];std::strftime(date_time, 64, "%Y-%m-%d.%a.%X", std::localtime(&time));return string(date_time);}int main(int argc, char *argv[]) {if(argc < 5) {cerr << "Usage: " << argv[0] << " <server_ip> <server_port> <client_number> <file_names_list...>" << endl;return 1;}string server_ip_address = argv[1];unsigned server_port = boost::lexical_cast<unsigned>(argv[2]);unsigned client_number = boost::lexical_cast<unsigned>(argv[3]);for(int i = 4; i < argc; i++) {string file_name = argv[i];for(;;) { // просто бесконечный циклtry { // отсюда и до catch ловим исключительные ситуации// Создать клиентаClient client(server_ip_address, server_port, client_number, file_name);// Запустить клиентаclient.run();// Выход из циклаbreak;} catch (exception &e) { // Если поймали исключение - произошла ошибка// Пишем что за ошибкаcerr << e.what() << endl;// Сохраняем запись об ошибке в строкуstring ex(e.what());// Если это ошибка подключенияif(ex.find("connect:") != string::npos) {// Подождать 60 секундboost::this_thread::sleep_for(boost::chrono::seconds(60));// На следующую итерацию главного бесконечного цикла (for(;;))continue;}}}}return 0;}Данный файл предназначен для первой редакции программы: синхронизации и архивации файлов. В нем не предусмотрены варианты обмена данными для обновления интерфейса. Измененный файл находится во второй части главы.Server.hpp#include <ctime> // функции для работы с датой и временем#include <fstream> // классы и методы для работы с файловыми потоками ввода-вывода#include <iostream> // классы и методы для работы со стандартными потоками ввода-вывода#include <string> // классы и методы для работы со строками#include <boost/array.hpp> // класс-обертка для массивов#include <boost/asio.hpp> // классы и методы для сетевого ввода-вывода#include <boost/filesystem.hpp> // классы и методы для работы с файловой системой#include <boost/lexical_cast.hpp> // библиотека для лексических преобразованийusing std::cout; // чтобы не писать везде std::cout, а писать просто coutusing std::cerr;using std::endl;using std::exception;using std::ofstream;using std::string;using boost::array;using boost::asio::ip::tcp;/* * Сервер висит на одном порту и ждет подключений. Когда клиент подключается, * сервер принимает сначала имя пересылаемого файла, затем сам файл. Если во * время передачи происходит ошибка, сервер разрывает соединение и ждет следующих * подключений. */class Server {const unsigned port_number; // номер портаstring ip_address; // IP-адрес сервера (не используется)static const unsigned buffer_size = 65536; // размер буфера для временного хранения куска пересылаемого файла пока этот кусок не записан на дискstatic const unsigned short max_filename_length = 260; // максимальная длина имени файлаofstream logfile; // поток вывода для лог-файлаofstream outfile; // поток вывода для принимаемого файлаboost::asio::io_service io_service; // главный объект ввода-вывода в библиотеке boost::asiotcp::endpoint endpoint; // конечная точка tcp-соединения (сервер)tcp::acceptor *acceptor; // слушает порт и принимает подключенияbool receive_filename(tcp::socket &socket, string &filename); // принимает имя файла от клиента. В случае успеха возвращает истину, иначе - ложьbool receive_file(tcp::socket &socket, const string &filename); // принимает файл от клиента. В случае успеха возвращает истину, иначе - ложьvoid write_log(const tcp::socket &socket, const string &filename);string current_time(); // возвращает строку с текущей датой и временемpublic:Server(const unsigned portNumber, const string &logFileName); // инициализировать сервер~Server(); // уничтожить серверvoid run(); // запустить сервер};Данный файл предназначен для первой редакции программы: синхронизации и архивации файлов. В нем не предусмотрены варианты обмена данными для обновления интерфейса. Измененный файл находится во второй части главы.Server.cpp#include "server.hpp"Server::Server(const unsigned portNumber, const string &logFileName): port_number(portNumber) {endpoint = tcp::endpoint(tcp::v4(), port_number); // создаем конечную точку tcp-соединенияacceptor = new tcp::acceptor(io_service, endpoint); // создаем слушателя портаip_address = endpoint.address().to_string();logfile.open(logFileName.c_str(), std::ios::app|std::ios::out); // открываем лог-файл}Server::~Server() {delete acceptor; // удалить все динамически выделенные ресурсыlogfile.close(); // закрыть открытые файлы}void Server::run() { // поехали!for(;;) {tcp::socket socket(io_service); // создаем сокетacceptor->accept(socket); // слушаем сокетstring filename;if(!receive_filename(socket, filename)) { // если не удалось получить имя файлаsocket.close(); // закрываем соединениеcontinue; // на следующую итерацию (ждем новых соединений)}if(!receive_file(socket, filename)) { // если не удалось принять файлsocket.close();continue;}write_log(socket, filename); // пишем информацию о принятом файле в лог}}bool Server::receive_filename(tcp::socket &socket, string &filename) {boost::system::error_code error;array<char, max_filename_length> file_name_buffer; // буфер, куда будем считывать имя файлаsocket.read_some(boost::asio::buffer(file_name_buffer), error); // читаем из сокета в буферif(error == boost::asio::error::eof) return false; // если нечего читать, значит клиент ничего не отправил => ошибкаelse if(error) throw boost::system::system_error(error); // если возникла другая ошибка, то бросается исключениеfilename = string(file_name_buffer.data()); // сохраняем имя файла в строкуreturn true; // операция получения имени файла прошла успешно}bool Server::receive_file(tcp::socket &socket, const string &filename) {boost::system::error_code error;array<char, buffer_size> buffer; // буфер куда будем считывать файл из сокетаboost::filesystem::path file = filename;boost::filesystem::path directory = socket.remote_endpoint().address().to_string(); // имя каталога = ip-адрес клиентаif(!boost::filesystem::is_directory(directory)) { // если каталог еще не существуетif(!boost::filesystem::create_directory(directory)) { // создать его. Если не удалосьcerr << "Невозможно создать каталог " << directory.string() << endl;return false; // произошел сбой при приеме файла}}boost::filesystem::path file_path = directory / file; // полный путь к создаваемому файлуoutfile.open(file_path.string().

Список литературы

10. Список литературы.
1. Свободная энциклопедия Wikipedia: [Электронный ресурс] / Банкомат. - Электрон. дан. – Режим доступа: http://ru.wikipedia.org/wiki/Банкомат. загл. с экрана.
2. Статья сайта www.tadviser.ru «Государство. Бизнес. ИТ» [Электронный ресурс] / ЦФТ-Устройство самообслуживания/ЦФТ-Банкомат – Режим доступа: http://www.tadviser.ru/index.php/ЦФТ-Устройство_самообслуживания /ЦФТ-Банкомат загл. с экрана.
3. Статья сайта www.solarix.ru [Электронный ресурс] /«Библиотеки BOOST C++» – Режим доступа: http://www.solarix.ru/for_developers/ cpp/boost/boost-library-list.shtml загл. с экрана.
4. Статья сайта http://habrahabr.ru/ [Электронный ресурс] /«Boost это просто ч.1» – Режим доступа: http://habrahabr.ru/post/64226/ загл. с экрана.
5. Свободная энциклопедия Wikipedia: [Электронный ресурс] / Boost. - Электрон. дан. – Режим доступа: http://ru.wikipedia.org/wiki/Boost загл. с экрана.
6. Статья сайта http://white55.narod.ru [Электронный ресурс] / «Командные файлы» – Режим доступа: http://white55.narod.ru/cmd.html
7. Свободная энциклопедия Wikipedia: [Электронный ресурс] / Кроссплатформенное программное обеспечение – Режим доступа: http://ru.wikipedia.org/wiki/Кроссплатформенное_ПО загл. с экрана.
8. Статья сайта www.solarix.ru [Электронный ресурс] /«Библиотеки BOOST C++: библиотека Array - массивы с постоянным размером» – Режим доступа: http://www.solarix.ru/for_developers/cpp/boost/array/s-a-r/array.shtml загл. с экрана.
9. Статья сайта www.solarix.ru [Электронный ресурс] /«Библиотеки BOOST C++: библиотека для работы с именами файлов» – Режим доступа: http://www.solarix.ru/for_developers/cpp/boost/filesystem/ru/index.shtml загл. с экрана.
10. Статья сайта www.solarix.ru [Электронный ресурс] /«Библиотеки BOOST C++: библиотека преобразований - хидер boost/lexical_cast» – Режим доступа: http://www.solarix.ru/for_developers/cpp/boost/conversion/ru/lexical_cast.shtml загл. с экрана.
11. Статья сайта GameDev.ru — Разработка игр [Электронный ресурс] /« boost::asio - введение, синхронный обмен» – Режим доступа: http://www.gamedev.ru/code/articles/boost_asio_0 загл. с экрана.
12. Статья сайта http://do.gendocs.ru [Электронный ресурс] /«1 Понятие операционной системы » – Режим доступа: http://do.gendocs.ru/docs/index-226537.html?page=4 загл. с экрана.
13. Свободная энциклопедия Wikipedia: [Электронный ресурс] / С++ – Режим доступа: http://ru.wikipedia.org/wiki/C++ загл. с экрана.
14. Свободная энциклопедия Wikipedia: [Электронный ресурс] / Пакетный файл – Режим доступа: http://ru.wikipedia.org/wiki/Пакетный_файл загл. с экрана.
15. Федеральный закон РФ №98 «О коммерческой тайне» от 25 июля 2004 года.
16. Приказ ХХХХХХХХХХХХХХ №265 «Политика информационной безопасности» от 20.06.2008 года.
17. Приказ ХХХХХХХХХХХХХХ №266 «Положение о конфиденциальной информации» от 20.06.2008 года.
18. Приказ ХХХХХХХХХХХХХХ №52 «Правила работы в локальной вычислительно сети» от 05.06.2000 года.
19. Регламент ХХХХХХХХХХХХХХ «О неразглашении сведений, составляющих конфиденциальную информацию» от 23.11.2008 года
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
© Рефератбанк, 2002 - 2022