CONECTIVIDADE. Desenvolvimento de Sistemas WEb Computação Móvel

Documentos relacionados
Conexão Socket na MIDP

Java ME e suas principais tecnologias de conectividade. Gracieli Begia Mateus

Capítulo 15 - VendaRemota.java

Uma Introdução ao. Computação Móvel (MAC5743/MAC330) Prof. Alfredo Goldman Monitores: Rodrigo Barbosa Daniel Cordeiro

Programação com sockets (em Java)

Programação para Celular com Java

INF1013 MODELAGEM DE SOFTWARE

Aula 30 - Sockets em Java

Desenvolvimento de Sistemas Móveis em Java com J2ME/MIDP. Jorge H. C. Fernandes

Java. para Dispositivos Móveis. Thienne M. Johnson. Novatec. Desenvolvendo Aplicações com J2ME

Tutorial J2ME Parte 3

Java : Comunicação Cliente-Servidor.

Manual do Desenvolvedor Criptografia de Arquivos do WebTA

Programação em Rede Baseada em Java. Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída

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

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

Programação para Dispositivos Móveis. Prof. Wallace Borges Cristo

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

UNIVERSIDADE ESTADUAL DO OESTE DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE INFORMÁTICA

Programação para Celular com Java Tipos de Tela

Threads e Sockets em Java. Threads em Java. Programas e Processos

Programa de Computador que funciona em Rede

Capítulo II Modelos de Programação Distribuída

APIs PARA J2ME. JSR 120 (SMS), JSR 205 (WMAPI 2.0) e JSR 180 (SIP) TÓPICOS EM ENGENHARIA DE COMPUTAÇÃO V. Prof. José Mario De Martino

UMA ABORDAGEM SOBRE J2ME

Um pouco do Java. Prof. Eduardo

Sockets em Java. Leonardo R. Nunes - leonardo@sumersoft.com. 1. Introdução. 2. Sockets TCP/IP

FTP FILE F TRANSFER PROTOCOL. Tópicos

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Java 2 Standard Edition Fundamentos de

Cliente-servidor com Sockets TCP

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

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

Aula Prática 10 - Configuração Básica de Rede Wi-Fi

Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP

Bacharelado em Ciência e Tecnologia BC Processamento da Informação Teoria Arquivos Prof. Edson Pinheiro Pimentel edson.pimentel@ufabc.edu.

4 MODELAGEM DA APLICAÇÃO J2ME

Programação Gráfica Parte 1 Versão em Java 2006 PUCPR Tutoria de Jogos 1º Ano

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

Wireshark. Captura de Protocolos da camada de aplicação. Maicon de Vargas Pereira

Conexão HTTP em Java ME Aula 7. Marcio Seiji Oyamada

Sistemas Distribuídos

Agregador de feeds RSS para dispositivos móveis

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

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

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Sockets. Bruno Guimarães Lucas Rossini

MAGREGISTER 1.0: GERADOR DE INTERFACES DE COLETAS DE DADOS PARA PDA S. Acadêmico: Gilson Chequeto Orientador: Adilson Vahldick

UNIVERSIDADE. Sistemas Distribuídos

Persistência de Classes em Tabelas de Banco de Dados

Um Driver NDIS Para Interceptação de Datagramas IP

SyncEasy Aplicativo para sincronização de arquivos entre dispositivos móveis e computadores utilizando metadados

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Mobile Command. Diego Armando Gusava. Orientador: Mauro Marcelo Mattos

Redes de Computadores /1

Sockets. Introdução. Introdução. Programando para redes em Java. mecanismo de alto nível para acessar recursos na Internet.

THREADS EM JAVA. George Gomes Cabral

CRIAÇÃO DE SITES (AULA 1)

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

Marcus Vinicius Cruz Xavier. Rascunho do trabalho de conclusão de curso

APLICAÇÃO MOBILE MARKETING COM COMUNICAÇÃO BLUETOOTH FOCADA EM BARES E RESTAURANTES. Acadêmico: Rafael Formento Orientador: Paulo Fernando da Silva

Manual de Operação Aplicativo ClickIt

INTEGRANDO A TECNOLOGIA J2ME NO ÂMBITO ACADÊMICO

AULA 01 INTRODUÇÃO. Eduardo Camargo de Siqueira REDES DE COMPUTADORES Engenharia de Computação

Prática de Programação J2ME (15) Especialização em Desenvolvimento Web com Interfaces Ricas

Prime: uma solução Java para acesso móvel a informações utilizando GSM/GPRS

IW10. Rev.: 02. Especificações Técnicas

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

Implementando comunicação em JAVA via Sockets. Alcides Calsavara - alcides@ppgia.pucpr.br Leonardo R. Nunes - leonardo@sumersoft.

GERAÇÃO DE RELATÓRIOS

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

Manual de utilização do Sistema de gerenciamento de inspeção de equipamentos (SGIE) Conteúdo

18/04/2006 Micropagamento F2b Web Services Web rev 00

Programação de sockets com TCP

Invocação de Métodos Remotos

Felipe Guimarães

Sistemas Distribuídos

Figura 1: Componentes do Kepler

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

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

Maestro. Arthur Kazuo Tojo Costa Universidade Federal de São Carlos Campus Sorocaba Bacharelado em Ciência da Computação

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

Ler e escrever bytes, caracteres e Strings de/para a entrada e saída padrão. Ler e escrever bytes, caracteres e Strings de/para arquivos

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

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

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

INFORMÁTICA IINTERNET / INTRANET

APLICAÇÃO REDE APLICAÇÃO APRESENTAÇÃO SESSÃO TRANSPORTE REDE LINK DE DADOS FÍSICA 1/5 PROTOCOLOS DE REDE

Orientação a Objetos

Arquitectura de Sistemas Computacionais

4. Qual seria o impacto da escolha de uma chave que possua letras repetidas em uma cifra de transposição?

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

Invocação de Métodos Remotos RMI (Remote Method Invocation)

SISTEMAS DISTRIBUIDOS

J2ME, Uma Platarfoma de programação para Dispositivos Móveis

Sistemas Distribuídos

Professor: Gládston Duarte

Transcrição:

CONECTIVIDADE Desenvolvimento de Sistemas WEb Computação Móvel

Conectividade em Java ME Conectividade( redes) em Java ME: Flexível para suportar uma variedade de dispositivos Muitos dispositivos específicos ao mesmo tempo. Solução: GCF (Generic Connection Framework) Foi criado para oferecer conectividade de acordo com as características heterogêneas do ambiente de computação móvel

A ideia do GCF é definir as abstrações de rede e arquivos I/O de forma tão genérica quanto possível. Essas abstrações são definidas como interfaces Java. Os fabricantes de dispositivos escolhem quais interfaces serão implementadas e aplicadas com base nas capacidades de seus dispositivos MIDP.

Composto por duas classes: Connector e PushRegistry A classe Connector é usada para criar objetos de conexão A classe PushRegistry é usada para manter uma lista de conexões de entrada

Interfaces As interfaces de conexão do GCF definem os tipos de comunicação que podem ser realizadas Conexões simples de entrada e saída Conexões com datagramas (transmissão de pacotes sem mecanismo de confiança) Com sockets (um link de comunicação fim-a-fim em redes IP) Com HTTP (Hypertext Transfer Protocol, protocolo de transmissão de dados entre clientes e servidores) Entre outras formas. Consultar a documentação!!!!

GCF Diagrama de Classes Básico Fonte: Jakl, 2009 - http://www.symbianresources.com

GCF Diagrama de Classes MIDP Fonte: Jakl, 2009 - http://www.symbianresources.com

Bluetooth Arquivos SmartCards Messaging. Pacotes Opcionais

A URL de Conexão Argumentos de conexão são especificados através do seguinte formato de endereçamento:

Classe Connector A classe Connector implementa os métodos necessários para abertura de conexões Essencialmente, essas conexões podem ser usadas para enviar (escrever) e receber (ler) dados Os tipos de conexão podem ser: WRITE : Modo de acesso somente escrita envio de dados READ : Modo de acesso somente leitura recepção de dados READ_WRITE : Modo de acesso de leitura e escrita Ao criar uma conexão, é opcional a definição do modo de acesso. Porém, se o modo de acesso não for especificado, o modo READ_WRITE é usado por padrão

Classe Connector Métodos Relacionados O método mais básico a ser usado é o da criação da conexão: Connection open (String string_conexao) A String de conexão deve seguir o formato protocolo:[alvo][parâmetros] protocolo: indica o tipo de conexão a ser criada Deve-se escolher esse parâmetro de acordo com a necessidade da aplicação Tipos de protocolo: socket, datagram, http, file e com

Classe Connector Métodos Relacionados alvo: um host (um computador ou servidor que está na rede) uma porta de um host um arquivo ou uma porta de comunicação a escolha do alvo depende do tipo de protocolo definido anteriormente parâmetros: (opcional) também depende do tipo de protocolo selecionado

Classe Connector Abertura de Conexão A sobrecarga do método open permite a sua utilização de três formas distintas static Connection open (String name) static Connection open (String name, int mode) static Connection open (String name, int mode, boolean timeout) Cria e abre uma conexão Cria e abre uma conexão com a definição de um modo de acesso Cria e abre uma conexão com a definição de um modo de acesso e um timeout

Exemplos de Conexão Com o protocolo HTTP: Connection c = Connector.open ( http://j2me.datamazon.com ) Connection c = Connector.open ( http://j2me.datamazon.com,0) Connection c = Connector.open ( http://j2me.datamazon.com,0,1000) Com um socket: Connection cs = Connector.open ( socket://localhost:9000 ) Com um arquivo: Connection ca = Connector.open ( file://dados.txt ) Para fechar uma conexão: void close()

import javax.microedition.io.*; import javax.microedition.midlet.*; public class TesteConexao extends MIDlet { public TesteConexao() { public void pauseapp(){ public void destroyapp(boolean unconditional){ notifydestroyed(); Exemplo public void startapp(){ try { String URL ="http://j2me.datamazon.com"; Connection conexao = Connector.open(URL, Connector.READ_WRITE); System.out.println("Conectado com "+URL ); conexao.close(); System.out.println("Conexao fechada"); catch( Exception exc ){ System.out.println("URL não pode ser aberta -"+exc ); destroyapp(true); Fonte Java para Dispositivos Móveis - Desenvolvendo aplicações com J2ME por Thienne M. Johnson ; Novatec Editora LTDA; ISBN: 978-85-7522-143-3

Conexão Assíncrona Fonte: Jakl, 2009 - http://www.symbianresources.com

Conexão Assíncrona Solução: Para evitar problemas de deadlock ou travamento do dispositivo, é recomendada a criação de threads específicas para a execução de funções de comunicação em rede

Leitura de Dados / Fluxo de Dados Para ler e receber dados da conexão, deve-se implementar fluxo de dados Fluxo de entrada usado para ler conteúdo Fluxo de saída usado para enviar conteúdo Os fluxos são obtidos a partir da referência ao objeto da conexão já estabelecida Para conexões em que as duas partes desejam enviar e receber dados: Utilização da interface StreamConnection através dos métodos InputStreamConnection e OutputStreamConnection

Leitura de Dados / Fluxo de Dados Para analisar os dados que serão enviados/recebidos e manipular a conexão de forma mais precisa: Utilização da interface ContentConnection Disponibiliza métodos como gettype() Métodos relacionados a fluxos dados: static DataInputStream opendatainputstream (String name) static DataOutputStream opendataoutputstream (String name) static InputStream openinputstream (String name) static OutputStream openoutputstream (String name)

Leitura de Dados / Fluxo de Dados Exemplo: conexão ContentConnection e fluxo de entrada com InputStream import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.*; public class TesteStream extends MIDlet { public TesteStream() { public void pauseapp(){ public void destroyapp(boolean unconditional){ notifydestroyed(); public void startapp(){ try { String URL ="http://j2me.datamazon.com"; ContentConnection conexao = (ContentConnection)Connector.open(URL); InputStream IS = conexao.openinputstream(); int conteudo; System.out.println( "Tipo de conteúdo é "+ conexao.gettype() ); while( ( conteudo = IS.read() )!= -1 ){ System.out.print((char)conteudo); IS.close(); conexao.close(); catch( ConnectionNotFoundException exc ){ System.out.println("URL não pode ser aberta" ); catch(ioexception exc ){ System.out.println( exc.tostring() ); destroyapp(true); Fonte: Java para Dispositivos Móveis - Desenvolvendo aplicações com J2ME por Thienne M. Johnson ; Novatec Editora LTDA

Leitura de Dados / Fluxo de Dados Atenção Não é possível recuperar/manipular uma referência à conexão real, mas somente aos fluxos de entrada e saída Isso significa que não podemos manipular ou pesquisar a conexão diretamente

Leitura de Dados / Fluxo de Dados Exemplo: conexão StreamConnection para acessar um servidor e buscar um arquivo texto import java.io.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class BuscaArquivoTexto extends MIDlet { private Display display; public BuscaArquivoTexto() {display = Display.getDisplay(this); public void pauseapp() { public void destroyapp(boolean unconditional) { 0); public void startapp() { String URL = "http://j2me.datamazon.com/arquivoteste.txt"; StreamConnection SC = null; InputStream IS = null; StringBuffer SB = new StringBuffer(); TextBox textbox = null; try { SC = (StreamConnection)Connector.open(URL); IS = SC.openInputStream(); int dadosentrada; while((dadosentrada = IS.read())!= -1) { SB.append((char) dadosentrada); System.out.println(SB.toString()); textbox = new TextBox("Teste de StreamConnection", SB.toString(), 1024, if(is!= null) { IS.close(); if(sc!= null) { SC.close(); display.setcurrent(textbox); catch (Exception exc) { System.out.println("Exception " + exc);

Leitura de Dados / Fluxo de Dados Exemplo: conexão que acessa um servidor e busca uma arquivo de imagem do tipo png public class BuscaImagem extends MIDlet { private Display display; private Form tela; public BuscaImagem() { display = Display.getDisplay(this); public void pauseapp() { public void destroyapp(boolean unconditional) { public void startapp() { String URL = "http://j2me.datamazon.com/midlets.png"; InputStream IS = null; Image img = null; try { IS = Connector.openInputStream(URL); ByteArrayOutputStream BAOS = new ByteArrayOutputStream(); int dadosentrada; while ((dadosentrada = IS.read())!= -1) BAOS.write(dadosEntrada); byte dadosimagem[] = BAOS.toByteArray(); img = Image.createImage(dadosImagem, 0, dadosimagem.length); if (img!= null){ ImageItem imagem = new ImageItem("Nova Imagem", img, ImageItem.LAYOUT_CENTER, null); int largura = img.getwidth(); int altura = img.getheight(); tela = new Form("Nova Imagem "+largura+"x"+altura ); tela.append(imagem); else tela = new Form("Erro de download da imagem"); display.setcurrent(tela); if(is!= null) IS.close(); catch (Exception exc) { System.out.println("Exception " + exc);

import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.*; public class TesteHTTP extends MIDlet { GCF (Generic Connection Framework) Leitura de Dados / Fluxo de Dados Exemplo: Conexão com HTTP public TesteHTTP() { public void pauseapp(){ public void destroyapp(boolean unconditional){ notifydestroyed(); public void startapp(){ try { String URL ="http://j2me.datamazon.com"; HttpConnection conexao = (HttpConnection)Connector.open(URL); InputStream IS = conexao.openinputstream(); System.out.println( "Tipo de conteúdo é "+ conexao.gettype() ); System.out.println("Cabeçalho= "+conexao.getheaderfield(1)); System.out.println("Porção Arquivo= "+conexao.getfile()); System.out.println("Host= "+conexao.gethost()); System.out.println("Porta= "+conexao.getport()); System.out.println("Protocolo= "+conexao.getprotocol()); System.out.println("Tipo de requisição= "+conexao.getrequestmethod()); System.out.println("Código de resposta= "+conexao.getresponsecode()); System.out.println("Mensagem de resposta= "+conexao.getresponsemessage()); IS.close(); conexao.close(); catch( ConnectionNotFoundException exc ){ System.out.println("URI não pode ser aberta" ); catch( IOException exc ){ System.out.println( exc.tostring() ); destroyapp(true);

Conexões com Sockets Sockets são usados para criar um link de comunicação entre um cliente e um servidor (dispositivo móvel ou não) Etapas: Primeiramente especificar o socket do lado do servidor através da interface ServerSocketConnection, como no exemplo: ServerSocketConnection conexaoservidor = (ServerSocketConnection)Connector.open( socket://<porta> ); No lado do cliente usamos o formato: SocketConnection conexaoservidor = (SocketConnection)Connector.open( socket://<host>:<porta> ); É possível também especificar algumas opções para comunicação com sockets, como: tamanho de buffer de escrita, tempo para deixar a porta de comunicação aberta, tamanho do buffer de recepção e de envio,... Ver documentação...

Exemplo: Conexão com Sockets Socket Cliente import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.*; public class SocketCliente extends MIDlet implements Runnable{ public SocketCliente() { public void destroyapp(boolean unconditional) { protected void pauseapp() { protected void startapp(){ Thread t = new Thread(this); t.start(); public void run() { try { SocketConnection conexao = SocketConnection)Connector.open("socket://localhost:5000"); System.out.println("CLIENTE: Conectado ao servidor"); InputStream IS = conexao.openinputstream(); while (true) { StringBuffer buff = new StringBuffer(); int dadosentrada = 0; while (((dadosentrada = IS.read())!= '\n') && (dadosentrada!= -1)) { buff.append((char)dadosentrada); if (dadosentrada == -1) { break; System.out.println("CLIENTE: Mensagem recebida = " + buff.tostring()); IS.close(); conexao.close(); catch (Exception exc){ System.out.println(exc);

import java.io.*; import javax.microedition.io.*; import javax.microedition.midlet.*; GCF (Generic Connection Framework) Exemplo: Conexão com Sockets Socket Servidor public class SocketServidor extends MIDlet implements Runnable{ public SocketServidor() { public void destroyapp(boolean unconditional) { protected void pauseapp() { protected void startapp(){ Thread t = new Thread(this); t.start(); public void run() { try { ServerSocketConnection conexaoserver = (ServerSocketConnection)Connector.open("socket://:5000"); SocketConnection conexao = (SocketConnection)conexaoServer.acceptAndOpen(); System.out.println("SERVIDOR: Conexão aceita"); OutputStream OS = conexao.openoutputstream(); String message = "SERVIDOR: Hello Cliente! Vamos testar a comunicação!"; try { OS.write(message.getBytes()); OS.write("\r\n".getBytes()); System.out.println("SERVIDOR: Mensagem enviada"); catch (Exception exc) { System.out.println(exc); OS.close(); conexao.close(); conexaoserver.close(); catch (Exception exc) { System.out.println(exc);

Tópicos Avançados Framework Marge (conectividade com bluetooth) https://marge.dev.java.net/ Framework Floogy (persistência de dados) floggy.sourceforge.net/ Web Service (manipulação de XML) Mobile Media API (controle de recursos multimídia) Wireless Messaging API (SMS) API para desenvolvimento de jogos (GameCanvas) Location API (posicionamento global / GPS)

Exemplo de Aplicações

Placar Eletrônico para Partida de Tênis Sistema que utiliza comunicação sem fio para que o árbitro registre e controle o andamento da partida a distância Principais componentes do sistema: Aplicação desenvolvida no LEC (Laboratório de Experiências Computacionais). Laboratório vinculado aos Cursos de Ciência da Computação e Sistemas de Informação da URI Campus Santo Ângelo-RS Desenvolvedores: Professores Denilson R. Silva e Luciano L. Caimi Bolsistas: Anderson A. Parreiras e Tales Marchesan

Placar Eletrônico para Partida de Tênis Característica e Recursos Aplicação de controle instalada no PDA o Java Micro Edition (MIDP 2.0 e CLDC 1.1) Aplicação Servidora (Desktop) o Plataforma Java padrão para Desktop (JDK 1.5) Utilizando sockets, o programa cria um canal de comunicação com a aplicação servidora através da interface Wi-Fi PDA Zire 71 com cartão Wi-Fi AP (Acess Point ) Dlink DWL2000AP+ configurado com criptografia WEP 104 bits Computador Dell Vostro 200 com placa de vídeo GForce2 5200 TV de Plasma 42 polegadas

Placar Eletrônico para Partida de Tênis

O sistema de Acompanhamento Acadêmico para Dispositivos Móveis CLDC URI Mobile Os principais requisitos do sistema é acessar, buscar, persistir e visualizar informações acadêmicas como: disciplinas, curso, frequência, avaliações, datas especiais, etc. Possibilidade de persistência das informações para consultas off-line nos dispositivos Fonte (vargas, 2007) SISTEMA DE ACOMPANHAMENTO ACADÊMICO PARA DISPOSITIVOS MÓVEIS CLDC URI MOBILE Trabalho de Conclusão de Curso Ciência da Computação / URI Santo Ângelo Aluno: Moacir José de Vargas Orientador: Denilson Rodrigues da Silva

O sistema de Acompanhamento Acadêmico para Dispositivos Móveis CLDC Arquitetura do URI Mobile Integrar tecnologias heterogêneas, através do uso de web service Portal do aluno da URI, desenvolvido em Microsoft.NET, para acesso utilizando PCs Disponibilização de dados à uma aplicação desenvolvida em linguagem Java, utilizando o Java ME

O sistema de Acompanhamento Acadêmico para Dispositivos Móveis CLDC URI Mobile Pacotes, Classes e Interfaces

O sistema de Acompanhamento Acadêmico para Dispositivos Móveis CLDC URI Mobile Classe SendData - Exemplo de envio de informações String DadosWS_SOAP () Método que gera o XML dinamicamente realiza a conexão enviando estes dados, recebe os e fecha a conexão. Parte do Código deste método, responsável por gerar o XML, e abrir a conexão, pode ser visto na a seguir.

Gênius Bluetooth Gênius (Simon): brinquedo popular nos anos 80 Lógica baseada na memorização de cores sequenciais Recursos utilizados: Interface gráfica baixo nível baseada em Canvas Conexão bluetooth (Framework Marge) Uso de Threads

Gênius Bluetooth