Лекция: Разработка сервера

В коде сервера в первую очередь нужно указать библиотеке поддержки RPC, какой протокол собирается использовать сервер и как идентифицировать сервер в соответствии с этим протоколом (какая его конечная точка — endpoint).

RPC_STATUS RPC_ENTRY RpcServerUseProtseqEp(unsigned char *prot.

unsigned int max_calls, unsigned char *endpoint, void *sec_desc);

где: prot — строка, которая определяет протокол («ncacn_ip_tcp» — TCP/IP, «ncacn_np» -поіменовані каналы);

max_calls — максимальное количество соединений с сервером (значения по умолчанию задают как RPC_C_LISTEN_MAX_CALLS_DEFAULT);

endpoi nt — строка, которая определяет конечную точку (для TCP/IP он задает порт, для поименованных каналов — имя канала).

Эта функция возвращает статус RPC-вызова; если он равняется 0 (RPCS0K) — вызов завершился успешно. Аналогичный код возвращают и другие RPC-функции.

// сервер использует TCP/IP. прослушивает порт 5000

RpcServerUseProtseqEp(«ncacn_ip_tcp». 5. «5000», NULL);

После задання протокола необходимо зарегистрировать интерфейсы в библиотеке поддержки RPC для того, чтобы клиенты могли его находить:

// для каждого интерфейса из IDL-файла

RpcServerRegisterIf(ihello_v1_0_s_ifspec. NULL. NULL);

Первым параметром задают структуру определения интерфейса, которую генерирует rnidl.

Имя такой структуры строят на основании имени интерфейса и его версии: имя_v1_0_s_іfspec.

Теперь клиенты смогут найти сервер, и можно перейти в режим ожидания соединений:

// ожидание соединений от клиентов

RpcServerListen(1, 5. FALSE);

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

RpcServerUnregisterlf(NULL. NULL. FALSE);

еще рефераты
Еще работы по информатике