Автор работы: Пользователь скрыл имя, 17 Декабря 2011 в 13:04, курсовая работа
В данном курсовом проекте разработана программа-аналог системы p2p. Данная программа создана в среде Delphi версии 7.0. Программа представляет собой комплекс средств для обмена файлами между пользователями в сети, включающий в себя хаб, клиентское приложение, поиск нужных файлов, предоставление доступа к информации, чат между пользователями. Наряду с этим, в программе реализованы права доступа на действия с файлами пользователей.
Введение 5
1. Анализ технического задания 7
2. Реализация 13
3. Тестирование 13
Заключение 18
Список литературы 19
2. Реализация
3. Тестирование
В качестве среды программирования разработанного аналога системы p2p была выбрана среда Dlphi 7.7. Конфигурация созданной программы представлена в таблице 1.
Запустим хаб:
Рисунок 1 – Запуск хаба
Для
подключения пользователей
Рисунок 2 – Получение ip-адресов хаба
После этого запустим два клиентских приложения и зайдем по данным ip-адресам на хаб:
Рисунок 3 – Вход нового пользователя на хаб
После входа двух пользователей информация о них отобразится на хабе:
Рисунок 4 – Изменения на хаба после входа пользователей
Скачаем файл у пользователя:
Рисунок 5 – скачивание и отдача файлов
Найдем файл:
Рисунок 6 – Поиск файла
Рисунок 7 – Чат между пользователями
Рисунок
8 – Добавление прав для пользователя
Рисунок 9 – Выход с хаба
Рисунок 10 – отключение хаба
Заключение
При выполнении данного курсового проекта мною был разработана программа-аналог системы p2p. В курсовом проекте были разработаны два приложения: хаб - для работы со множеством пользователей, и клиентское приложение – для взаимодейсвия самих пользователей между собой. Приложение разработано в среде программирования Delphi 7.0. В разработанной программе реализован обмен информацией между пользователями, поиск информации, общение клиентов программы между собой, настройка хаба и клиентов, возможность предоставлять доступ к файлам, регистрация пользователей на хабе, а также средства администрирования на хабе. Также в приложении отображаются различные характеристики файлов и процессов, процесс скачивания и отдачи файлов другим пользователям.
Разработанная программа была протестирована на работоспособность и эффективность. По результатам экспериментов было выявлено, что все базовые алгоритмы работают корректно и эффективно. Выполнены все исходные требования к проекту.
Цели
и задачи, поставленные на начальном
этапе проектирования, были успешно реализованы
в ходе выполнения данного курсового проекта.
Список литературы
4. А.И.
Миков, Е.Б. Замятина Распределенные системы
и алгоритмы. –СПб. Питер,2007
ПРИЛОЖЕНИЕ А
Листинг программы
Клиентское приложение:
unit uMain;
interface
uses
ActiveX, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShlObj, StdCtrls, ComCtrls, ToolWin, Menus, ActnList, ImgList, StrUtils, Contnrs,
ExtCtrls, Registry, Variants, ShellAPI, Buttons, IniFiles,
bsP2PAgentSDK_TLB, ErrMsg, uAlert, uChat, uFiles, uSearch, Globals,
uSettings;
const
SESSION_STATUS_CONNECTING = 1;
SESSION_STATUS_CONNECTED = 2;
AUTO_OPEN_TIME = 5000;
AUTO_CLOSE_TIME = 2000;
type
TfMain = class(TForm)
StatusBar: TStatusBar;
Timer: TTimer;
GroupBox3: TGroupBox;
btnConnect: TButton;
btnDisconnect: TButton;
btnCancel: TButton;
btnExit: TButton;
GroupBox1: TGroupBox;
lvPeers: TListView;
btnFiles: TButton;
btnChat: TButton;
btnSearch: TButton;
GroupBox2: TGroupBox;
mmLog: TMemo;
btnUsers: TButton;
btnAlert: TButton;
btnSettings: TButton;
btnRemove: TButton;
btnBytes: TButton;
btnAutoTest: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnConnectClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnDisconnectClick(Sender: TObject);
procedure btnClearLogClick(Sender: TObject);
procedure btnUsersClick(Sender: TObject);
procedure lvPeersChange(Sender: TObject; Item: TListItem; Change: TItemChange);
procedure btnChatClick(Sender: TObject);
procedure btnAlertClick(Sender: TObject);
procedure btnFilesClick(Sender: TObject);
procedure btnSearchClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure btnSettingsClick(Sender: TObject);
procedure btnBytesClick(Sender: TObject);
procedure btnRemoveClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
private
{ Private declarations }
StateTick: Longword;
procedure LogMsg(aText: String);
procedure AutoTest;
function SelectPeer(aHandle: Integer): Boolean;
procedure LoadForm;
procedure SaveForm;
procedure SetSettings;
procedure UpdateStatus;
procedure UpdateButtons;
procedure DeletePeer(aPeer: TPeer);
procedure GoSessionOpen(Sender: TObject);
procedure GoSessionClosed(Sender: TObject);
procedure GoSessionRejected(Sender: TObject; aCode: Integer);
procedure GoPeerConnected(Sender: TObject; aHandle: Integer);
procedure GoPeerDisconnected(Sender: TObject; aHandle: Integer);
procedure GoAlertMessage(Sender: TObject; aHandle: Integer; const aMessage: WideString);
procedure GoChatMessage(Sender: TObject; aHandle: Integer; const aMessage: WideString);
procedure GoBinaryMessage(Sender: TObject; aHandle: Integer; var aValue: OleVariant);
procedure GoNeedFileList(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoHaveListItem(Sender: TObject; aHandle: Integer; const aName: WideString; aFolder: WordBool; aSizeLo, aSizeHi, aTimeLo, aTimeHi: Integer);
procedure GoListDone(Sender: TObject; aHandle: Integer; aCode: Integer);
procedure GoNeedCreateFolder(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoCreateFolderDone(Sender: TObject; aHandle: Integer; aCode: Integer);
procedure GoNeedRenameFolder(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoRenameFolderDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoNeedRenameFile(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoRenameFileDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoNeedDeleteFolder(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoDeleteFolderDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoNeedDeleteFile(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoDeleteFileDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoDownloadClientDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoDownloadClientProgress(
procedure GoNeedDownload(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoDownloadServerDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoClientUploadDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoUploadClientProgress(Sender: TObject; aHandle, aCountLo, aCountHi, aSizeLo, aSizeHi: Integer);
procedure GoNeedUpload(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoServerUploadDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoNeedZip(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoZipProgress(Sender: TObject; aHandle, aFileCount, aFileTotal, aByteCountLo, aByteCountHi, aByteTotalLo, aByteTotalHi: Integer);
procedure GoClientZipDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoServerZipDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoNeedUnzip(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoUnzipProgress(Sender: TObject; aHandle, aFileCount, aFileTotal, aByteCountLo, aByteCountHi, aByteTotalLo, aByteTotalHi: Integer);
procedure GoClientUnzipDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoServerUnzipDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoNeedSearch(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);
procedure GoHaveFindFile(Sender: TObject; aHandle: Integer; const aName: WideString; aSizeLo, aSizeHi, aTimeLo, aTimeHi: Integer);
procedure GoSearchProgress(Sender: TObject; aHandle, aCount: Integer);
procedure GoClientSearchDone(Sender: TObject; aHandle, aCode: Integer);
procedure GoServerSearchDone(Sender: TObject; aHandle, aCode: Integer);
public
{ Public declarations }
SelPeer: TPeer;
P2pAgent: TP2PAgent;
MyPeers: TObjectList;
procedure CheckError(aCode: Integer);
end;
var
fMain: TfMain;
function Make64(aLo, aHi: Integer): Int64;
function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
function FileTimeToText(aFileTime: TFileTime): String;
function SizeStr(aSize: Int64): String;
implementation
uses uAdd, uConnect, uRights, Tools;
{$R *.DFM}
function SizeStr(aSize: Int64): String;
var
i,j: Integer;
S: String;
begin
Result := '';
S := IntToStr(aSize);
i := Length(S);
j := 3;
while i > 0 do
begin
if j = 0 then
begin
Result := ',' + Result;
j := 3;