Upload
elliando-dias
View
807
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Invocação Remota de Invocação Remota de Procedimentos Procedimentos
(RPC)(RPC)
Alexandre BragançaAlexandre Bragança
20012001
DEI / ISEPDEI / ISEP
Modelo de ProgramaçãoModelo de Programação
Cliente-ServidorCliente-Servidor
FuncionamentoFuncionamento
OSF DCEOSF DCE DCE = Distributed Computing EnvironmentDCE = Distributed Computing Environment OSF = Open Software FoundationOSF = Open Software Foundation
Exemplo Exemplo Hello WorldHello World
/* file hellop.c *//* file hellop.c */#include <stdio.h> #include <stdio.h> void HelloProc(unsigned char * pszString) void HelloProc(unsigned char * pszString) { {
printf(“%s\n”, pszString); printf(“%s\n”, pszString); } }
/* file: hello.c, a stand-alone application */ /* file: hello.c, a stand-alone application */ #include “hellop.c” #include “hellop.c” void main(void) void main(void) { {
unsigned Char * pszString = “Hello, unsigned Char * pszString = “Hello, World”; World”; HelloProc(pszString); HelloProc(pszString); } }
Definição do InterfaceDefinição do Interface
//file hello.idl//file hello.idl [ [ uuid(7a98c250-6808-11cf-b73b-00aa00b677a7), uuid(7a98c250-6808-11cf-b73b-00aa00b677a7), version(1.0) version(1.0) ] ] interface hello interface hello { { void HelloProc([in, string] unsigned char * void HelloProc([in, string] unsigned char * pszString); pszString); void Shutdown(void); void Shutdown(void); } }
• A função A função ShutdownShutdown permite que o cliente permite que o cliente ‘desligue’ o servidor‘desligue’ o servidor
Geração dos Geração dos StubsStubs
Midl hello.idl
Hello.hA incluir no
cliente e no servidor
hello_c.c Stub Cliente
hello_s.cStub Servidor
Implementação do código do Implementação do código do ServidorServidor
#include <stdlib.h>#include <stdio.h>#include "hello.h" // header file generated by MIDL compiler
void HelloProc(unsigned char * pszString){ printf("%s\n", pszString);}
void Shutdown(void){ RPC_STATUS status;
printf("Calling RpcMgmtStopServerListening\n"); status = RpcMgmtStopServerListening(NULL); printf("RpcMgmtStopServerListening returned: 0x%x\n", status); if (status) { exit(status); } printf("Calling RpcServerUnregisterIf\n"); status = RpcServerUnregisterIf(NULL, NULL, FALSE); printf("RpcServerUnregisterIf returned 0x%x\n", status); if (status) { exit(status); }}
Compilação & ExecuçãoCompilação & Execução
• CompilaçãoCliente: helloc.exe helloc.c - Código do cliente hello_c.c – Stub
Servidor: hellos.exe hellos.c – Código do servidor hellop.c – Implementação dos serviços hello_s.c – Stub do servidor
• ExecuçãoNo servidor: hellosNo cliente: helloc