Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы Мартын 1(ComCorbaLab2004).doc
Скачиваний:
34
Добавлен:
10.02.2016
Размер:
2 Мб
Скачать
☆

8.2. Индивидуальные задания на работу

8.2.1. Общее задание для всех студентов.Проверить наличие библиотекиWSOCK32.DLLи зарегистрировать приложение в библиотеке, определить описание реализации интерфейсаWindowsSocketи его текущее состояние.

8.2.2. Индивидуальное задание для каждого студента.Подготовить приложение к созданию четырех сокетов - двух датаграммных сокетов и двух сокетов виртуального канала, с максимальным размером датаграммного пакета, равным числу из последних трех цифр номера зачетной книжки студента. Формат адреса соответствует принятому вInternet.

8.2.3. Индивидуальное задание для каждого студента.Задать параметры сокетов, подготовив структуры типаsockaddr. Предусмотреть возможность работы: в широковещательном режиме для первого сокета; с определеннымиIP-адресами для второго и третьего сокетов, равными соответственно «192.168.ZZZ.1ХХ» и «192.168.ZZZ.1ХХ+1», гдеZZZ– номер подсети, указанный преподавателем, ХХ – последние две цифры номера зачетной книжки студента; с любым адресом для четвертого сокета.

8.2.4. Индивидуальное задание для каждого студента.В файлеHOSTSопределить четыре доменных имени для собственной рабочей станции и другой рабочей станции с номером, равным «№-1», где «№» - номер собственной рабочей станции (при «№-1», равном нулю, номер другой станции принимается равным «8»). В состав доменных имен ввести собственные инициалы. Имена связать с локальными датаграммным и виртуальным адресами «192.168.ZZZ.1ХХ» и «192.168.ZZZ.1ХХ+1», а также с удаленными датаграммным и виртуальным адресами «192.168.ZZZ.1ХХ+2» и «192.168.ZZZ.1ХХ+3». Выполнить с помощью функцииgethostbynameполучение указателей на структуры, характеризующие имена и адреса узлов.

8.2.5. Общее задание для всех студентов.Выполнить привязку всех подготовленных адресов и сокетов. Спровоцировать возврат функциейbindзначенияSOCKET_ERRORпо причине:

Код ошибки Описание

WSANOTINITIALISEDПеред использованием функции необходимо вызвать функциюWSAStanup

WSAENETDOWNСбой в сети

WSAEADDRINUSEУказанный адрес уже используется

WSAEFAULTЗначение параметраnamelenменьше размера структурыsockaddr

WSAEINPROGRESSВыполняется блокирующая функция интерфейсаWindowsSockets

WSAEAFNOSUPPORTЭтот протокол не может работать с указанным семейством адресов

WSAEINVALСокет уже привязан к адресу

WSAENOBUFSУстановлено слишком много соединений

WSAENOTSOCKУказанный в параметре дескриптор не является сокетом

8.2.6. Общее задание для всех студентов.Для освобождения ресурсов последовательно закрыть все сокеты и завершить работу приложения сWindowsSockets.

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

Лабораторная работа № 9. Создание менеджеров сервантов

На очередном занятии мы с вами посмотрим на технику создания менеджеров сервантов и расширим наш телефонный проект, реализовав объект сотовой станции и его сервер.

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

1. В модуле Cellular_System, описанном в файле Cellular_System.idl, добавлена операция findIdByNumber, пропущенная ранее, и в целях унификации вызовов изменен один из параметров операции SMSSent:

module Cellular_System

{

interface CellularSystem

{

#pragma version CellularSystem 1.0

// Найти id абонента по его номеру

unsigned long long findIdByNumber(in string number);

. . .

// Уведомление о посылке текстового сообщения

oneway void SMSSent(in unsigned long long id,

in unsigned long long callee, in

Utility::TimeMark timeMark);

. . .

};

};

2. Добавлена операция копирования канала данных в описание интерфейса DataChannel, располагающееся внутри файла Radio_Subsystem.idl:

interface DataChannel

{

#pragma version DataChannel 1.0

. . .

void copyChannel(in DataChannel toCopy);

};