Uma aplicação distribuída



Documentos relacionados
Desenvolver um pequeno aplicativo que possa demonstrar a utilização de sockets como meio de comunicação em sistemas distribuídos.

INF1013 MODELAGEM DE SOFTWARE

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

FTP - Protocolo. O protocolo FTP é o serviço padrão da Internet para a transferência de arquivos entre computadores.

Java : Comunicação Cliente-Servidor.


Sistemas Distribuídos

IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

Redes de Computadores

Protocolos de Internet (família TCP/IP e WWW) Primeiro Técnico. Prof. Cesar

Universidade Federal de Minas Gerais Instituto de Ciências Agrárias

FTP FILE F TRANSFER PROTOCOL. Tópicos

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Sistemas Distribuídos

Aula 30 - Sockets em Java

Sistemas Distribuídos RPC


Exemplos práticos do uso de RMI em sistemas distribuídos

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

Data: 22 de junho de

e à Linguagem de Programação Python

Segurança da Informação. Prof. Gleison Batista de Sousa

TUTORIAL JAVA AS - HTTP CLIENT COMPOSITION ENVIROMENT 7.1

Um pouco do Java. Prof. Eduardo

3 SERVIÇOS IP. 3.1 Serviços IP e alguns aspectos de segurança

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Web services. Um web service é qualquer software que está disponível através da Internet através de uma interface XML.

MIDDLEWARE Aplicativos RMI, RPC e eventos Camadas Protocolo Requesição-Respostal Middleware Representação Externa dos Dados Sistemas Operacionais

INFORMÁTICA FUNDAMENTOS DE INTERNET. Prof. Marcondes Ribeiro Lima

Introdução ao Modelos de Duas Camadas Cliente Servidor

Aprendendo Python na Prática. Dante Moreira Zaupa Mestrando em Computação Aplicada Bolsista de Pesquisa

MODELO CLIENTE SERVIDOR

Olho por olho, e o mundo acabará cego. Mohandas Gandhi

Linguagens de programação

Processo de Envio de

NETALARM GATEWAY Manual Usuário

Capítulo 8 - Aplicações em Redes

Comunicação em Sistemas Distribuídos. Conceitos: Paradigma C/S. Conceitos: Paradigma C/S. Paradigma Cliente/Servidor

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS IMPRESSÃO. Professor Carlos Muniz

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Tutorial para envio de comunicados e SMS

Python Condicionais e Loops. Introdução à Programação SI1

Sistemas Distribuídos

Camadas de Transporte, Sessão & Apresentação. Função. Camadas REDES x TRANSPORTE. Redes de Computadores Prof. Leandro C. Pykosz

Programação de Computadores - I. Profª Beatriz Profº Israel

Manual de Integração SMS

Introdução ao PHP. Prof. Késsia Marchi

I N T R O D U Ç Ã O W A P desbloqueio,

Geral: Manual de Utilização do Software de Teste Gradual Windows

Camada de Aplicação. DNS Domain Name System. Redes de Computadores Prof. Leandro C. Pykosz

MicroDNS. Armando Adami Zaro Pablo Augusto Lerina Rodrigues. 3 de outubro de 2007

Kassius Vargas Prestes

Protocolos Telnet e SSH. Professor Leonardo Larback

Máscaras de sub-rede. Fórmula

2 Diagrama de Caso de Uso

Outlook XML Reader Versão Manual de Instalação e Demonstração UNE Tecnologia

Relatório do Laboratório 3

COORDENAÇÃO DE TECNOLOGIA (COTEC) OUTUBRO/2010

Instalação Cliente Notes 6.5

USO GERAL DOS PROTOCOLOS SMTP, FTP, TCP, UDP E IP

Arquitetura de Redes: Camadas de Protocolos (Parte I) Prof. Eduardo

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

A Linguagem Python: Uma visão geral. Prof. Alberto Costa Neto Programação em Python

Objetivo. Este documento tem como objetivo demonstrar o conceito, o processo de instalação e o funcionamento do SITEF (Tef dedicado).

Sistemas Distribuídos Capítulos 3 e 4 - Aula 4

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

Aula pratica 4 Testar Conexões TCP/IP em Redes Industrias Usando os comandos Ping e Net View (1.a Parte)

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

MÓDULO DE ENVIO DE MENSAGEM (SMS) MANUAL DO SISTEMA MICROWORK ADICION

Programação com sockets (em Java)

Manual do Usuário. Integrador FC Store V ACSN Desenvolvimento de Software do Brasil Ltda. Av. Dom Pedro II, 1211 Salto SP

Sistemas Distribuídos

Guia de Conectividade Worldspan Go Res! A V A N Ç A D O

Comunicação Inter-Processos. Prof. Adriano Fiorese. Conceitos Iniciais

Projeto de Implementação do protocolo Gnutella

Redes de Computadores. Prof. Dr. Rogério Galante Negri

SISTEMAS DISTRIBUIDOS

Programação Básica em Arduino Aula 2

Manual de Instalação

Componentes da linguagem C++

SIMULADOR DE ROTEAMENTO DE PACOTES (V. 3 20/05/2010)

Universidade Federal do Pará Centro de Tecnologia da Informação e Comunicação Grupo de Trabalho SET. Tutorial PyQT4

Ajuda das opções Fiery 1.3 (cliente)

Iniciando o MySQL Query Brower

Biometria Instalação de Serviço e Certificado Digital

Curso de Aprendizado Industrial Desenvolvedor WEB

Lista de Erros Discador Dial-Up

s editores de s Como configurar contas de nos principais Como configurar contas de s nos principais editores de s

Fábio Rodrigues Jorge.

PÓS-GRADUAÇÃO EM MATEMÁTICA COMPUTACIONAL INFORMÁTICA INSTRUMENTAL

Transcrição:

Uma aplicação distribuída César H. Kallas O Centro de Ciências Exatas, Ambientais e de Tecnologias Pontifícia Universidade Católica de Campinas Campinas Brasil Faculdade de Engenharia de Computação cesarkallas @ cesarkallas.net RA: 02099224 Resumo: O projeto consiste no desenvolvimento de uma aplicação cliente/servidor usando o sistema de chamdas de funções remotas (RPC). O servidor RPC da aplicação terá 3 funções básicas. Inverter uma frase; Calcular o maior divisor de um número e Calcular a raiz quadrada de um número. Essas funções serão executadas no servidor, a pedido do cliente. O cliente conecta no servidor e passa o parâmetro e função que deseja que o servidor execute. 1. Introdução O projeto foi desenvolvido utilizando a linguagem interpretada Python. Ele possui dois arquivos: servidor.py cliente.py O servidor.py tem uma função principal main() que recebe como parâmetro a porta no qual o servidor http RPC aceita conexões, essa função main() que cria uma nova instância da classe Funcoes, que possui as funções abaixo: InversaoFrase(frase) MaximoDivisor(numero) RaizQuadrada(numero) Quit Com a instância dessa classe cria, o servidor cria um novo servidor de requisições RPC com XML e registra a instância dessa classe de funções nesse servidor, para que o cliente possa usá-las e o inicia. Todo o pedido de acesso ao servidor pelo cliente será feito através de um servidor http embutido no servidor.py. As mensagens de troca entre o servidor e o cliente são feitas através de arquivos XML (Quadro 1), o qual possui os dados da função desejada pelo cliente. O cliente.py tem uma função principal main() que recebe como parâmetros o endereço ip/host e a porta no qual vai conectar, essa função main() cria uma nova

conexão RPC com o servidor que retorna um objeto, que permite ao cliente chamar funções que estão no servidor e receber respostas. <methodcall> <methodname>sample.sumanddifference</methodname> <params> <param><value><int>5</int></value></param> <param><value><int>3</int></value></param> </params> </methodcall> Quadro 1: Exemplo de arquivo XMLRPC Após conectar, o cliente pede as opções possiveis do servidor e a exibe no cliente. O cliente por sua vez, escolhe uma opção e a envia para o servidor RPC, esperando então uma resposta dele. Se der erro, o cliente receberá uma mensagem de exceção. 2. Seções Específicas 2.1 Inversão de Frase A função vai ler uma entrada do usuário (string) e vai inverte-la através de uma expressão regular. A inversão ocorre no retorno da variável string, que recebe como parâmetro uma expressão regular de inversão: [::-1], return string[::-1]. 2.2 Cálculo da Raiz Quadrada A raiz quadrada é calculada através de uma função embutida no módulo math que já vem no python, sqrt(float). A função sqrt recebe um float, calcula sua raiz e retorna um float com o resultado. 2.3 Máximo Divisor A função MaximoDivisor(numero) recebe um número como parâmetro, e o máximo divisor desse número é calculado através da divisão sucessiva dele por 2. 2.4 Protocolo de Comunição A comunicação do cliente com o servidor se dá através do protocolo TCP/IP, usando socket. Pedidos possíveis pelo cliente: 'InversaoString(frase)' aonde frase é uma cadeia de caracteres. 'MaximoDivisor(numero)' aonde numero é um inteiro de 32 bits Respostas do servidor: Para frase = 'cesar kallas' Resposta = 'sallak rasec' Para numero = 10 Resposta = 5

Pedidos possíveis pelo cliente: 'RaizQuadrada(numero)' aonde número é um inteiro de 32 bits 'Quit' Respostas do servidor: Para numero = 4 Resposta = 2 Desconecta o cliente 3. Resultado da Execução do Programa Desenvolvido O resultado da execução do programa foi satisfatório. Resultados do cliente.py 02099224@localhost /tmp $ python cliente.py http://172.16.12.163:10000 Digite a opcao: 1 Digite a frase: cesar rasec Digite a opcao: 2 Numero: 100000000 10000.0 Digite a opcao: 2 Numero: 123123123123 350889.046741 Digite a opcao: 3 Numero: 500 250 Digite a opcao: 4 02099224@localhost /tmp $ 4. Conclusão O propósito do programa foi alcançado com sucesso. 5. Referências PYTHON. Linguagem de programação orientada a objetos. Disponível na internet em: <http://www.python.org>. Acesso em 30/08/2006. 6. Apêndice

Quadro 2: servidor.py import socket import sys import time import math import string import thread import SimpleXMLRPCServer class Funcoes(object): def InversaoFrase(self, frase): Funcao que inverte uma frase Entradas: frase: string Saida: fraseinvertida: string com a frase de entrada invertida -1: para falha try: fraseinvertida = frase[::-1] return fraseinvertida except Exception: return "-1" def RaizQuadrada(self, numero): Funcao que calcula a raiz quadrada de um numero Entrada: numero: numero a ser calculado a raiz quadrada Saida: raiz: raiz quadrada do numero -1: para falha try: raiz = math.sqrt(float(numero)) return raiz except Exception: return "-1" def MaximoDivisor(self, numero): Funcao que calcula o maximo divisor de um numero Entrada: numero: numero para ser calcula o seu maximo divisor Saida: maxdiv: maximo divisor do numero -1: para falha try: numero = int(numero) if numero <= 1: return numero maxdiv = numero for i in range(1, numero-1): if numero % (i) == 0: maxdiv = i if maxdiv == 1: return maxdiv except Exception: return "-1" if numero > 1: return numero def main(porta):

Quadro 2: servidor.py funcoes = Funcoes() servidorrpc = SimpleXMLRPCServer.SimpleXMLRPCServer(('', porta)) servidorrpc.register_instance(funcoes) servidorrpc.serve_forever() if name == " main ": if len(sys.argv) == 2: porta = sys.argv[1] if porta.isdigit() == True: main(int(porta)) sys.exit(0) print "Uso: %s porta" % sys.argv[0]

Quadro 3: cliente.py from socket import * from string import * import sys import string import xmlrpclib def main(servidor): opcoes = ( "", "", "", "" ) servidor = xmlrpclib.serverproxy(str(servidor)) while(1): for opcao in opcoes: print opcao entrada = raw_input("digite a opcao: ", ) if entrada == "1": frase = raw_input("digite a frase: ", ) if len(frase) > 0: frase = servidor.inversaofrase(frase) print frase else: print "frase invalida" elif entrada == "2": numero = raw_input("numero: ", ) print servidor.raizquadrada(numero) elif entrada == "3": numero = raw_input("numero: ", ) print servidor.maximodivisor(numero) elif entrada == "4": break print "\n" if name == " main ": if len(sys.argv) == 2: main(sys.argv[1]) else: print "Uso: %s host\nexemplo: %s http://localhost:10000" % (sys.argv[0], sys.argv[0])