Разработка аналога системы p2p

Автор работы: Пользователь скрыл имя, 17 Декабря 2011 в 13:04, курсовая работа

Описание работы

В данном курсовом проекте разработана программа-аналог системы p2p. Данная программа создана в среде Delphi версии 7.0. Программа представляет собой комплекс средств для обмена файлами между пользователями в сети, включающий в себя хаб, клиентское приложение, поиск нужных файлов, предоставление доступа к информации, чат между пользователями. Наряду с этим, в программе реализованы права доступа на действия с файлами пользователей.

Содержание работы

Введение 5
1. Анализ технического задания 7
2. Реализация 13
3. Тестирование 13
Заключение 18
Список литературы 19

Файлы: 1 файл

Пояснительная записка.doc

— 596.50 Кб (Скачать файл)
 
 

 

     

      2. Реализация

     3. Тестирование

     В качестве среды программирования разработанного аналога системы p2p была выбрана среда Dlphi 7.7. Конфигурация созданной программы представлена в таблице 1.

     Запустим  хаб:

Рисунок 1 – Запуск хаба

      Для подключения пользователей узнаем адреса хаба:

Рисунок 2 – Получение ip-адресов хаба

     После этого запустим два клиентских приложения и зайдем по данным ip-адресам на хаб:

Рисунок 3 – Вход нового пользователя на хаб

      После входа двух пользователей информация о них отобразится на хабе:

Рисунок 4 – Изменения на хаба после входа  пользователей

      Скачаем файл у пользователя:

Рисунок 5 – скачивание и отдача файлов

      Найдем  файл:

Рисунок 6 – Поиск файла

Рисунок 7 – Чат между пользователями

Рисунок 8 – Добавление прав для пользователя 
 

Рисунок 9 – Выход с хаба

Рисунок 10 – отключение хаба

     Заключение 

     При выполнении данного курсового проекта мною был разработана программа-аналог системы p2p. В курсовом проекте были разработаны два приложения: хаб - для работы со множеством пользователей, и клиентское приложение – для взаимодейсвия самих пользователей между собой. Приложение разработано в среде программирования Delphi 7.0. В разработанной программе реализован обмен информацией между пользователями, поиск информации, общение клиентов программы между собой, настройка хаба и клиентов, возможность предоставлять доступ к файлам, регистрация пользователей на хабе, а также средства администрирования на хабе. Также в приложении отображаются различные характеристики файлов и процессов, процесс скачивания и отдачи файлов другим пользователям.

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

     Цели  и задачи, поставленные на начальном  этапе проектирования, были успешно реализованы в ходе выполнения данного курсового проекта. 
 
 

 

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

    1. Э. Таненбаум, М. ван Стеен Распределенные системы. – СПб.: Питер. 2003

    2.   Анатолий Хомоненко, Владимир Гофман, Евгений Мещеряков Delphi 7. – СПб.: БХВ-Петербург, 2010

    3.   А. Я. Архангельский Программирование в Delphi. – М.: Бином-Пресс, 2008

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(Sender: TObject; aHandle, aCountLo, aCountHi, aSizeLo, aSizeHi: Integer);

    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;

Информация о работе Разработка аналога системы p2p