Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB1.DOC
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
171.01 Кб
Скачать

5.Простая система "клиент-сервер"

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

Когда сервер примет пакет от клиента, в поле ImmAddres блока ECB сервера окажется непосредственный адрес клиента. Поэтому сервер сможет ответить клиенту индивидуально, по его адресу в текущей сети.

Клиент, в свою очередь, получив пакет от сервера, сможет узнать его сетевой адрес (по содержимому поля ImmAddres блока ECB). Следующий пакет клиент отправит серверу, используя непосредственный адрес сервера.

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

6.Порядок выполнения лабораторной работы

Лабораторная работа предъявляется на проверку в виде пояснительной записки. Записка излагается в следующем порядке:

  • титульный лист;

  • задание;

  • введение, в котором излагаются цели, задачи и кратко содержание работы;

  • подробное словесное описание разрабатываемой системы "клиент-сервер" и блок-схема алгоритма разрабатываемых программ;

  • текст программы с подробными комментариями;

  • выводы.

Контрольные вопросы

1. Дайте определение пакета и протокола. Общая структура пакета.

2. Датаграммы. Определение. Их особенности.

3. Сетевой адрес IPX. Из каких компонентов он состоит?

4. Формат пакета IPX.

5. Какие действия необходимо проделать, чтобы обеспечить работу в сети с протоколом IPX?

6. В чем заключается инициализация сервера и клиента?

7. Может ли прикладная программа работать с драйвером сетевого адаптера напрямую?

8. Что такое блок ECB? Его назначение и структура?

9. Что такое широковещательный адрес и его назначение?

10. Функции API драйвера IPX.

Варианты заданий

1. Разработать программы передачи файлов с одной рабочей станции на другую (размер файлов неограничен).

2. Разработать программы обмена сообщениями между рабочими станциями.

3. Разработать программы синхронизации даты и времени одной рабочей станции по другой рабочей станции.

4. Разработать программы, которые позволят вести аудит обращений клиента к серверу.

5. Разработать программы, обеспечивающие рабочей станции клиенту возможность "просматривать" корневой каталог дисков рабочей станции сервера.

6. Разработать программы, которые позволят осуществлять поиск заданного файла с рабочей станции клиента в текущем каталоге компьютера-сервера.

7. Разработать программы, которые позволят формировать сообщение на рабочей станции клиенте, посылать это сообщение на рабочую станцию сервер и фиксировать его в файле.

8. Разработать программы, которые позволят определять с рабочей станции клиента наличие свободного места на дисках рабочей станции сервера.

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

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

11. Разработать программы, которые позволят изменять имя файла на рабочей станции сервере с рабочей станции клиента (старое и новое имя файла задается с клиента).

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

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

14. Разработать программы, которые позволят по запросу рабочей станции клиента выполнить сравнение содержимого двух файлов. Файлы задаются с клиента. Один файл должен быть расположен на сервере, а второй на клиенте.

15. Разработать программы, которые по запросу клиента обеспечат передачу на него с сервера количество файлов текущего каталога сервера, имена файлов и объем в байтах.

16. Разработать программы, которые по запросу с клиента позволят получить текущую дату и время на сервере.

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

18. Разработать программы, которые по запросу с клиента позволят получить от сервера максимально возможное значение сокетов, которые могут быть открыты на сервере.

19. Разработать программы, которые по запросу с клиента позволят отобразить содержимое заданного с клиента файла на экране сервера и клиента.

20. Разработать программы, которые позволят по запросу с клиента идентифицировать возможность доступа конкретного пользователя (по имени) к серверу.

Литература

  1. Фролов А.В. Локальные сети персональных компьютеров. Использование протоколов IPX, SPX, NETBIOS. – М.:”ДИАЛОГ-МИФИ”, 1993. – 160 с.

  2. Веттиг Д. Novell NetWare: Пер. с нем. – К.: Торгово-издательское бюро BHV, 1994 – 480 с.

Приложение 1

/********************************************/

/* Примеры реализации функций API IPX */

/********************************************/

#include <stdio.h>

#include <stdlib.h>

#include <dos.h>

#include "ipx.h"

extern void far (*ipxspx_entry)(void);

/******************************************/

/* */

/* .Name IntSwap */

/* */

/* .Title Обмен байтов в слове */

/* */

/* .Descr Функция меняет местами байты */

/* в слове, которое передается */

/* ей в качестве параметра */

/* */

/* */

/* .Params unsigned i - преобразуемое */

/* слово */

/* */

/* .Return Преобразованное слово */

/******************************************/

unsigned IntSwap(unsigned i)

{

unsigned j;

return ((i>>8) | (i & 0xff)<<8);

}

/****************************************** /

/* */

/* .Name IPXOpenSocket */

/* */

/* .Title Открыть сокет */

/* */

/* */

/* .Descr Функция открывает сокет, тип которого*/

/* передается ей через параметр SocketType.*/

/* Перед вызовом необходимо подготовить в */

/* памяти слово и записать в него значение */

/* открываемого сокета (или нуль, */

/* если нужен динамический сокет) */

/* Адрес слова передается через параметр Socket*/

/* Если открывается динамический сокет, его */

/* значение будет записано по адресу Socket. */

/* */

/* .Params int SocketType - тип сокета: */

/* 0х00 - короткоживущий; */

/* OXFF - долгоживущий. */

/* */

/* unsigned *Socket -указатель на слово, */

/* в котором находится номер */

/* открываемого сокета или нуль, */

/* если нужен динамический сокет. */

/* */

/* .Return 0 - сокет открыт успешно; */

/* OxFE - переполнилась таблица сокетов; */

/* OXFF - такой сокет уже открыт. */

/********************************************/

int IPXOpenSocket(int SocketType, unsigned *Socket)

{

int a;

_DX = IntSwap(*Socket);

_BX = 0;

_AX = SocketType;

ipxspx_entry();

a = _AX;

*Socket = IntSwap(_DX);

return (a);

}

/*********************************************/

/* */

/* .Name IPXCloseSocket */

/* */

/* */

/* .Title Закрытъ сокет */

/* */

/* .Descr Функция закрывает сокет. */

/* Перед вызовом необходимо подготовить в памяти*/

/* слово и записать в него значение закрываемого */

/* сокета. Адрес слова передается через параметр */

/* Socket. */

/* */

/* .Params unsigned *Socket - указатель на слово, */

/* в котором находится номер закрываемого */

/* сокета. */

/* */

/* .Return Ничего */

/**********************************************/

void IPXCloseSocket (unsigned *Socket)

{

_DX = IntSwap(*Socket);

_BX = 1;

ipxspx_entry();

}

/********************** ************************/

/* */

/* .Name IPXListenForPacket */

/* */

/* */

/* .Title Принять пакет */

/* */

/* .Descr Функция подготавливает ЕСВ для приема */

/* пакета из сети. Указатель на ЕСВ передается */

/* через параметр RxECB. */

/* */

/* .Раrams struct ЕСВ *RxECB - указатель на ЕСВ, */

/* заполненное для приема пакета. */

/* */

/* .Return Ничего */

/***********************************************/

void IPXListenForPacket (struct ECB *RxECB)

{

_ES = FP_SEG( (void far*)RxECB);

_SI = FP_OFF( (void far*)RxECB);

_BX = 4;

ipxspx_entry();

}

/***********************************************/

/* .Name IPXSendPacket */

/* */

/* .Title Передать пакет */

/* */

/* .Descr Функция подготавливает ECB для передачи */

/* пакета. Указатель на ЕСВ передается через */

/* параметр ТхЕСВ. */

/* */

/* .Params struct ЕСВ *ТхЕСВ - указатель на ЕСВ, */

/* заполненное для передачи пакета. */

/* */

/* .Return Ничего */

/***********************************************/

void IPXSendPacket(struct ECB *TxECB)

{

_ES = FP_SEG ((void far*)TxECB);

_SI = FP_OFF ((void far*)TxECB);

_BX = 3;

ipxspx_entry();

}

/***********************************************/

/* .Name IPXRelinquishControl */

/* */

/* .Title Передать управление IPX при ожидании */

/* */

/* .Descr Функция используется при ожидании */

/* завершения приема через опрос поля InUse */

/* блока ЕСВ. */

/* */

/* .Params Не используются */

/* */

/* .Return Ничего */

/***********************************************/

void IPXRelinquishControl (void)

{

_BX = 0xa;

ipxspx_entry();

}

23

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]