Figura 1: telas dos códigos do cliente e servidor. |
Figura 2: telas de execução do cliente e do servidor. |
Servidor
#********************************************************************
# Autor: ubiratã uaatsim itza I.
# Data: 07/03/2014
# Hora: 17:40:06
#*********************************************************************
# Arquivo: servidorchavevalor9.py
#
# Descrição: O arquivo servidorchavevalor4.py executou bem apareceu
# os métodos porém, não realiza nunhuma operação sem dar
# erro.
#
# Uso: from servidorchavevalor9 import ServidorChaveValor
# s = ServidorChaveValor
# s. --> aparecem os métodos e atributos disponíveis.
#
# Em 27/02/2014:
# 1- no janelas funciona até aparecer os métodos e atributos disponíveis.
# 2- no Ubuntu indica erros básicos.
#*********************************************************************
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ()
# Restringe para um particular caminho.
#class RequestHandler(SimpleXMLRPCRequestHandler):
# rpc_paths = ('/RPC2',)
v_dicionario = {'tan':88}
v_acesso = {'técnico':77,'administrador':66,'komum':33}
v_conectado = [1,2]
# Cria o servidor, pode ser "127.0.0.1" ou 'localhost'
servilo = SimpleXMLRPCServer(("127.0.0.1", 15000), allow_none = True, requestHandler=RequestHandler)
servilo.register_introspection_functions()
class ServidorChaveValor():
def __init__(self):
self.nome = 't'
def acesso(nome_terminal):
"""Gerencia o acesso ao terminal.
"""
v_conectado[0] = nome_terminal
if nome_terminal == v_acesso['técnico']:
print('Conectado:', v_acesso['técnico'])
elif nome_terminal == v_acesso['administrador']:
print('Conectado:', v_acesso['administrador'])
elif nome_terminal == v_acesso['komum']:
print('Conectado:', v_acesso['komum'])
else:
print('Acesso negado! Não conectado.')
servilo.register_function(acesso, 'acesso')
def versao():
"""Exibe a versão do RPC.
"""
print('RPC Versão 9.')
servilo.register_function(versao, 'versao')
def busca(v_chave):
"""Retorna o valor através da chave.
"""
if v_conectado[0] == v_acesso['administrador']:
print('Busca com sucesso!')
return v_dicionario[v_chave]
else:
print('Acesso negado! Não buscado.')
servilo.register_function(busca, 'busca')
def insere(v_chave, v_valor):
"""Inseri uma chave/valor no dicionário.
"""
if v_conectado[0] == v_acesso['administrador']:
v_dicionario[v_chave] = v_valor
print('Dado inserido com sucesso!')
else:
print('Acesso negado! Não inserido.')
servilo.register_function(insere, 'insere')
def apaga(v_chave):
"""Apaga uma chave.
"""
if v_conectado[0] == v_acesso['administrador']:
del v_dicionario[v_chave]
print('Dado removido com sucesso!')
else:
print('Acesso negado! Não apagado.')
servilo.register_function(apaga, 'apaga')
def mostra():
"""Mostra o dicionário.
"""
if v_conectado[0] == v_acesso['técnico']:
print(v_dicionario.keys())
else:
print('Acesso negado! Não mostrado.')
return -1
servilo.register_function(mostra, 'mostra')
def executa():
"""Executa o servidor infinitamente!
"""
if v_conectado[0] == v_acesso['administrador']:
try:
servilo.server_close()
print ('Use "Control-C" para encerrar o servidor 2.')
servilo.serve_forever()
except KeyboardInterrupt:
servilo.server_close()
print ('Saída 2!')
else:
print('Acesso negado! Não executado.')
servilo.register_function(executa, 'executa')
def fecha():
servilo.server_close()
servilo.register_function(fecha,'fecha')
servilo.register_instance(ServidorChaveValor())
if __name__ == '__main__':
try:
print ('Use "Control-C" para encerrar o servidor 1.')
servilo.serve_forever()
except KeyboardInterrupt:
servilo.server_close()
print ('Saída 1!')
#************************************************************************
Cliente
#********************************************************************
# Autor: ubiratã uaatsim itza I.
# Data: 07/03/2014
# Hora: 17:45:06
#*********************************************************************
# Arquivo: clienteRCP9.py
#
# Descrição: O arquivo servidorchavevalor9.py executou bem apareceu
# os métodos porém, não realiza nunhuma operação sem dar
# erro.
#
# Uso: import xmlrpc.client
# s = xmlrpc.client.ServerProxy('http://localhost:15000')
# s. --> aparecem os métodos e atributos disponíveis.
#
# Em 27/02/2014:
# 1- no janelas funciona até aparecer os métodos e atributos disponíveis.
# 2- no Ubuntu indica erros básicos.
#*********************************************************************
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import xmlrpc.client
#from xmlrpc.client import ServerProxy
s = xmlrpc.client.ServerProxy('http://localhost:15000')
#s = ServerProxy('http://127.0.0.1', allow_none = True) # pode ser "127.0.0.1" ou 'localhost'
s.acesso(66) # conecta-se ao sistema como usuário administrador.
s.versao() # verifica a versão do sistema.
print(s.busca('tan')) # faz uma busca do valor pela chave.
s.insere('x',12) # insere um elemento.
print(s.busca('x')) # faz uma busca do valor pela chave.
s.acesso(77) # conecta-se ao sistema como usuário técnico.
print(s.mostra()) # mostra todo o dicionário.
s.acesso(66) # conecta-se ao sistema como usuário administrador.
s.apaga('x') # apaga um item do dicionário pela chave.
s.acesso(77) # conecta-se ao sistema como usuário técnico.
print(s.mostra()) # mostra todo o dicionário.
s.acesso(66) # conecta-se ao sistema como usuário administrador.
#s.executa() # executa o RPC infinitamente.
print(s.system.listMethods())
#*********************************************************************
.