Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3Kypc_Koмn.Cucт_ЛР.doc
Скачиваний:
15
Добавлен:
07.02.2016
Размер:
233.98 Кб
Скачать

Лабораторная работа № 2

Тема: Установка сеанса с другим именем в сети с использованием протоколаNetBios

Цель: Научиться устанавливать сеанс с другим именем в сети для построения распределенной вычислительной системы.

Теоретические сведения.

Команды поддержки сеанса.

Эти команды образуют ядро NETBIOS, они несут ответственность за фактическую передачу информации (до 65535 байт по запросу) в сети. Прикладная программа использует команды поддержки сеанса для установления канала между двумя любыми именами в сети, или даже внутри самой ПЭВМ. Заметьте, что имена используются для инициации процесса, а NETBIOS возвращает номер в поле ncb.lsn, которое и будет применяться с этого момента далее.

В библиотеке netbios.hописаны следующие функции, необходимые для установки сеанса связи:

int CALL(char *call_name, char *name)

Функция инициирует сеанс с именем, определенным в call_name, используя местное имя, предоставляемоеname. Если сеанс установлен успешно, функция возвращает 0, в противном случае – код ошибки.

int LISTEN(char *call_name, char *name)

Функция позволяет осуществлять установку сеанса с именем, определенным в call_name. Вnameопределяется местное имя.

При вызове функции CALLимяcall_nameдолжно вызывать функциюLISTEN. Т.е. принцип установки сеанса заключается в следующем: при установке сеанса между двумя именами одно имя должно инициировать сеанс (с помощью функцииCALL, указав вcall_nameимя, с которым необходимо установить сеанс связи), а другое – осуществлять установку сеанса (с помощью функцииLISTEN, указав вcall_nameимя, инициирующее данный сеанс связи). Имеет смысл при вызове функцииLISTENуказывать вcall_name“*” – в этом случае связь устанавливается с любым именем, вызывавшим данное имя. После установки сеанса в полеncb.callnameзаписывается имя, инициирующее командуCALL. На рис. 1 изображена общая схема синхронизации пакетов сеанса.

1. Установка сеанса

Инициатор Ответчик

Открыть запрос

Открыть АСК

Запрос сеанса

Сеанс принят или

отвергнут

2. Передача данных

Инициатор Ответчик

Данные

ACKилиNACK

Данные

Данные (нет повторной)

передачи АСК)

ACKилиNACK

3. Завершение сеанса

Инициатор Ответчик

Закрыть

Закрыть

Закрыть

Примечание: АСК - символ подтверждения;

NACK- символ отрицательного квитирования.

Рис. 1 Общая схема синхронизации пакетов сеанса.

Как было сказано раньше, имена используются только для установления сеанса связи. Для дальнейшей работы (отправка, прием данных) необходим номер установленного сеанса. Этот номер записывается после успешной установки сеанса функциями CALLиLISTENв полеncb.lsn.

Пример установления сеанса:

Программа 1 Программа 2

int cur_lsn; int cur_lsn;

err=CALL(call_name, name); err=LISTEN(call_name, name);

if(err!=0) if(err!=0)

Error(err); Error(err);

cur_lsn=ncb.lsn; cur_lsn=ncb.lsn;

После того, как установленный канал связистал ненужным, необходимо закрыть данный сеанс. Это можно сделать, используя следующую функцию:

intHANGUP(intlsn)

Функция закрывает сеанс с другим именем. Lsn– номер сеанса, который необходимо закрыть. В случае ошибки возвращается ненулевое значение.

Задание

Написать программу, устанавливающую сеанс связи между двумя именами в сети.

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

  1. Какие функции отвечают за установление сеанса?

  2. Для каких целей отведено поле с номером сеанса?

  3. Каким образом возможно установление сеанса с любым именем узла?

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