Blogger templates

Comunidade java aberto - Participe da nossa comunidade no facebook (clique aqui)

Visitas

Mostrando postagens com marcador Java ME. Mostrar todas as postagens
Mostrando postagens com marcador Java ME. Mostrar todas as postagens

sexta-feira, 28 de dezembro de 2012

Sockets

,

Olá, vou tentar explicar um pouco de sockets em java
primeiramente vou apresentar o conceito de o que é esse
tal sockets.

Bem um socket é um canal de comunicação dentre duas míquinas
por determinadas aplicações comunicando entre si.
Em uma conexão de socket sempre existe um computador servidor
e outro computador cliente.
O computador servidor ele tem a função de abrir determinada porta
de comunicação, escutando (LISTENING), até que alguém, míquina cliente, 
tente fazer alguma conexão.

Para simplificar vou apresentar os métodos que uma míquina cliente tem que
executar.

1-Cria a conexão, cria um socket com algum servidor.
2-Cria um fluxo de comunicação no socket.
3-Utiliza o fluxo, conversa com a outra míquina.
4-Fecha o fluxo.
5-Fecha o socket.

Agora para uma míquina servidora os métodos mudam um pouco.

1-Cria um socket de escuta (LISTENING), em uma determinada porta.
2-Processa requisições de conexões, cria o socket com a míquina cliente.
3-Processa pedido de fluxo.
4-Utiliza o fluxo, conversa com a outra míquina.
5-Fecha o fluxo.
6-Fecha o socket.

Outra definição importante é referente a portas que são (ligações)
para conexões do seu computador para uma rede externa a ele (saàda) 
ou de uma rede externa para ele (entrada). 
Só existe compartilhamento, ou comunicação entre dois computadores, 
quando e houver conexões de entrada e saàda estabelecidas 
entre os dois computadores, através de uma determinada porta do computador 
de origem, à uma porta do computador de destino do compartilhamento.

Em java é possàvel executar dois tipos de conexões, modo baseado em conexão
e o sem conexão.

O modo baseado em conexão é algo parecido com uma padaria você pega o bilhete
e pega o pão, você confere para ver se é o pão que requisitou no bilhete e 
pronto. (TCP/IP)

http://www.juliobattisti.com.br/artigos ... pip_p1.asp 

O modo sem conexão é um pouco mais desorganizado, você entra na padaria e recebe
uma determinada quantidade de pão, doces, etc. Você que se vire com o que quer. (UDP)

http://www.juliobattisti.com.br/artigos ... ip_p11.asp 

Não vou entrar em detalhes sobre como fazer uma socket com conexão UDP, é algo
muito parecido com a conexão TCP/IP. Mas para quem quiser dar uma olhada, um breve
tutorial.

http://www.dca.fee.unicamp.br/cursos/Po ... k/udp.html 

Em java é extemamente simples criar um socket, vamos dar uma olhada nos construtores
das classes para uma simples conexão TCP/IP do lado do cliente.

Socket(String, int) - Nome do computador (Servidor) e a porta de comunicação.
Socket(String, int, boolean) - Nome do computador (Servidor), e a porta de comunicação,
e se o socket é com fluxo (true) TCP/IP ou não (false) UDP.

Socket(InetAddress, int) - O endereço Internet e a porta para conexão.
Socket(InetAddress, int, boolean) - O endereço da Internet (Servidor), e a porta de comunicação,
e se o socket é com fluxo (true) TCP/IP ou não (false) UDP.

Agora alguns métodos para a utilização de sockets, do lado cliente.

OutputStream getOutputStream() - Retorna a saida de fluxo do socket.
InputStream getInputStream() - Retorna o entrada de fluxo do socket.
InetAdress getInetAdress() - Retorna o InetAdress relacionado ao socket.
int getLocalPort() - Retorna a porta aberta para o socket.
close() - Fecha o socket.

Agora do lado servidor temos algumas mudanças, constutor necessírio para a conexão.

ServerSocket(porta) - Porta que ficarí em escuta (LISTENIG).

Os métodos mais bísicos.

accept() - Aguarda conexão em determinda porta coloca
em escuta (LIsTENING).
close() - Fecha o socket.

E como no lado cliente temos a classe Socket, só que do lado servidor
ele apenas pega o canal de comuniação. Ele faz isso quando aceita uma conexão 
usando o método accept(), que retorna um Socket. Esse socket jí é o canal 
de comunicação com a míquina cliente. Ou seja, também usaremos a classe 
Socket no servidor.

Agora alguns métodos para a utilização de sockets, do lado cliente.

OutputStream getOutputStream() - Retorna a saida de fluxo do socket.
InputStream getInputStream() - Retorna o entrada de fluxo do socket.
InetAdress getInetAdress() - Retorna o InetAdress relacionado ao socket.
int getLocalPort() - Retorna a porta aberta para o socket.
close() - Fecha o socket.

Agora que sabemos como conectar duas míquinas, vamos enviar e receber dados.

Para facilitar o envio e o recebimento de dados temos as classes BufferedReader e
PrintWriter.

O constutor padrão das classes recebem InputStream e OutputStrem com parâmetro, 
respectivamente. 

O construtor padrão para a classe BufferedReader.

BufferedReader(InputStreamReader(InputStream)) - Fluxo de comunicação.

Alguns métodos importantes da classe BufferedReader.

readLine() - Retorna uma String.
read() - Retorna um único caractere.
close() - Fecha o fluxo.

O construtor padrão para a classe PrintStream.

PrintStream(OutputStream) - Fluxo de comunicação.

Alguns métodos importantes da classe PrintStream.

println() - Envia uma String.
write() - Envia um byte.
close() - Fecha o fluxo.

Bem a seguir os códigos das aplicações.

Código da aplicação cliente:

Código:
/*
 * Main.java
 *
 * Created on 11 de Julho de 2007, 00:47
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package cliente;

//Importa pacotes para a criação de fluxos.
import java.io.*;
//Importa pacotes para a criação de sockets.
import java.net.*;


public class Main {
    
    /** Cria uma nova instância de Main */
    public Main() {
    }
    
    /**
     * @param args argumentos da linha de comando
     */
    public static void main(String[] args) {
        try {
            //Crio um socket
            Socket socket = new Socket("127.0.0.1", 606);
        
            //Crio o fluxo para o envio de dados
            OutputStream saida = socket.getOutputStream();            
            PrintStream escrita = new PrintStream(saida);
            
            if(args.length > 0) {
                //Envio a string passada
                escrita.println(args[0]);
                
            } else {
                escrita.println("Alucard");
            } 
            
        //Caso não encontre o host    
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        //Caso ocorra alguma exceção na criação do fluxo
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
    }
}
Código da aplicação servidor:

Código:
/*
 * Main.java
 *
 * Created on 11 de Julho de 2007, 01:45
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package servidor;

//Importa pacotes para a criação de fluxos.
import java.io.*;
//Importa pacotes para a criação de sockets.
import java.net.*;

public class Main {
    
    private ServerSocket server;
    private Socket socket;
    private InputStream entrada;
    private BufferedReader read;
    
    /** Cria uma nova instânica de Main */
    public Main() {
        try {
            //Abre uma prota para escuta (LISTENING)
            server = new ServerSocket(606);            
            
            //Imprime a Mensagem "Servidor aguardando conexao."
            System.out.println("Servidor aguardando conexao.");
            
            //Aguarda e cria a uma conexão
            socket = server.accept();
            
            //Cria um fluxo de entrada
            entrada = socket.getInputStream();
            read = new BufferedReader(new InputStreamReader(entrada));
            
            //Imprime o que veio na entrada
            System.out.println(read.readLine());
            
            //Fecha o fluxo o socket e o serverSocket
            read.close();
            socket.close();
            server.close();            
            
        //Caso ocorra alguma exeção na criação do fluxo.
        } catch (IOException ex) {
            //Imprimi o que aconteceu de erro
            ex.printStackTrace();
        }        
    }
    
    /**
     * @param args argumentos da linha de comando
     */
    public static void main(String[] args) {
        //Chama o método construtor na classe
        new Main();
    }
    
}
Bom a aplicação apenas cria um socket na escuta, enquanto outra 
aplicação tenta fazer uma conexão, enviando uma frase caso informe 
na linha de comando a frase serí mostrada no lado servidor.
Continue lendo

sexta-feira, 27 de julho de 2012

Sistemas distribuídos com RMI

,
Sistemas distribuídos com RMI

Aprenda a criar programas com arquitetura Cliente/Servidor com 

RMI (Método de Invocação Remota)




Continue lendo

sexta-feira, 29 de junho de 2012

Guia rápido comandos SQL

,



COMANDO SELECT
            A linguagem SQL foi criada com o objetivo de padronizar os comandos de manipulação de dados em SGBD’s. Hoje em dia, apesar da linguagem possuir uma quantidade considerável de extensões e implementações proprietárias, pode se afirmar que a meta foi alcançada. Conhecendo bem a linguagem é possível acessar os recursos básicos de qualquer banco relacional, como Oracle, SQL Server ou MySQL, sem praticamente nenhuma mudança.
            Veremos nesse artigo um pequeno guia de consultas para o comando SELECT, um dos mais importantes da linguagem SQL.
SELECT simples
            O comando SELECT permite recuperar os dados de um objeto do banco de dados, como uma tabela, view e, em alguns casos, uma stored procedure (alguns bancos de dados permitem a criação de procedimentos que retornam valor). A sintaxe mais básica do comando é:
            SELECT <LISTA_DE_CAMPOS>
            FROM <NOME_DA_TABELA>
Exemplo: 
            SELECT CODIGO, NOME FROM CLIENTES
            SELECT * FROM CLIENTES
            O caractere * representa todos os campos. Apesar de prática, este caractere não é muito utilizado, pois, para o SGBD, é mais rápido receber o comando com todos os campos explicitados. O uso do * obriga o servidor a consultar quais são os campos antes de efetuar a busca dos dados, criando mais um passo no processo.
COMANDO WHERE
            A cláusula Where permite ao comando SQL passar condições de filtragem. Veja o exemplo:
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE CODIGO = 10
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE UF = ‘RJ’
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE CODIGO >= 100 AND CODIGO <= 500
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE UF = ‘MG’ OR UF = ‘SP’
            Os parênteses corretamente utilizados dão mais poder as consultas:
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE UF = ‘RJ’ OR (UF = ‘SP’ AND ATIVO = ‘N’)
            Neste comando, todos os clientes do Rio de Janeiro e apenas os clientes inativos de São Paulo seriam capturados.
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE (ENDERECO IS NULL) OR (CIDADE IS NULL)
            Aqui todos os clientes que não possuem endereço ou cidade cadastrada serão selecionados.
FILTRO DE TEXTO
            SELECT CODIGO, NOME FROM FUNCIONARIOS
            WHERE DEPARTAMENTO = ‘VENDAS’
            Para busca parcial de string, o SELECT fornece o operador LIKE
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE NOME LIKE ‘MARIA%’
            Neste comando, todos os clientes cujos nomes iniciam com Maria serão retornados. Se quisermos retornar os nomes que contenham ‘MARIA’ também no meio, podemos alterar para:
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE NOME LIKE ‘%MARIA%’
            O uso de máscara no inicio e no fim da string fornece maior poder de busca, mas causa considerável perda de performance. Este recurso deve ser utilizado com critério.
OBS: Em alguns bancos de dados a máscara de filtro não é representada por %. Consulte a referência do banco para verificar o caractere correto.
            Por padrão a SQL diferencia caixa baixa de caixa alta. Para eliminar essa diferença, utiliza a função UPPER
            SELECT CODIGO, NOME FROM CLIENTES
            WHERE UPPER(NOME) LIKE ‘MARIA %SILVA%’

  ORDENAÇÃO           
            A ordenação pode ser definida com o comando ORDER BY. Assim como no comando WHERE, o campo de ordenação não precisa estar listado como campo de visualização:
            SELECT CODIGO, NOME FROM CLIENTES
            ORDER BY NOME
            SELECT CODIGO, NOME FROM CLIENTES
            ORDER BY UF, NOME
            A utilização da palavra DESC garante a ordenação invertida
            SELECT CODIGO, NOME FROM CLIENTES
            ORDER BY NOME DESC
            SELECT CODIGO, NOME FROM CLIENTES
            ORDER BY UF DESC

JUNÇÃO DE TABELAS
            O SELECT permite juntar duas ou mais tabelas no mesmo resultado. Isso pode ser feito de várias formas:
            SELECT CLIENTES.CODIGO, CLIENTES.NOME, PEDIDOS.DATA
            FROM CLIENTES, PEDIDOS
            WHERE CLIENTES.CODIGO = PEDIDOS.CODCLIENTE
            Nesta linha as tabelas relacionadas CLIENTES e PEDIDOS são unificadas através do campo chave, em uma operação de igualdade. Repare que os nomes dos campos passam a ser prefixados pelo nome das tabelas, resolvendo duplicidades. Uma versão resumida desse comando pode ser:
            SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR
            FROM CLIENTES A, PEDIDOS B
            WHERE A.CODIGO = B.CODCLIENTE
            O uso de aliases no código SQL torna a manutenção mais simples.
            No comando abaixo temos várias tabelas unificadas em uma mesma cláusula:
            SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR, C.QTD, D.DESCRIC
            FROM CLIENTES A, PEDIDOS B, ITENS C, PRODUTOS D
            WHERE A.CODIGO = B.CODCLIENTE
            AND B.CODIGO = C.CODPEDIDO
            AND C.CODPRODUTO = D.CODIGO
            Neste comando unificamos as tabelas relacionadas CLIENTES, PEDIDOS, ITENS e PRODUTOS. Veja mais alguns exemplos:
            SELECT A.CODIGO, A.NOME, B.DATA, B.VALOR
            FROM CLIENTES A, PEDIDOS B
            WHERE A.CODIGO = B.CODCLIENTE
            AND A.UF = ‘RJ’
            Observe que a junção através da igualdade de campos traz como resultado somente os registros que possuem referências nas duas tabelas. Observe o comando abaixo:
            SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
            FROM PROUTOS A, COMPONENTES B
            WHERE A.CODIGO = B.CODPRODUTO
            Os produtos que não possuem componentes não são selecionados. Caso seja necessário criar uma listagem incluindo também os registros que não possuem correspondência, deve se utilizar o comando JOIN.

COMANDO JOIN
            A junção de tabelas no comando SELECT também pode ser feita com o comando JOIN. Este comando deve ser utilizado com a palavra reservada INNER ou com a palavra OUTER:
INNER: Semelhante ao uso do operador “=” na junção de tabelas. Aqui os registros sem correspondências não são incluídos. Esta cláusula é opcional e pode ser omitida no comando JOIN.
OUTER: Os registros que não se relacionam também são exibidos. Neste caso, é possível definir qual tabela será incluída na seleção, mesmo não tendo correspondência.
            Para exemplificar, temos as tabelas abaixo:
            Observe os exemplos e o resultado produzido:
            SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO, B.QTD
            FROM PRODUTOS A
            INNER JOIN COMPONENTES B
            ON (A.CODIGO = B.CODPRODUTO)
            Este comando pode ser escrito na versão resumida abaixo:
            SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
            FROM PRODUTOS A
            JOIN COMPONENTES B
            ON (A.CODIGO = B.CODPRODUTO)
            Como mostrado no resultado, os produtos que não possuem componentes não são incluídos na seleção.
            SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO, B.QTDE
            FROM PRODUTOS A
            LEFT OUTER JOIN COMPONENTES B
            ON (A.CODIGO = B.CODPRODUTO)
            Neste comando todos os produtos serão incluídos na seleção, independente de possuírem um componente. Observe que a palavra LEFT se refere à primeira tabela do relacionamento. O mesmo comando poderia ser descrito da forma:
            SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
            FROM COMPONENTES A
            RIGHT OUTER JOIN PRODUTOS B
            ON (A.CODIGO = B.CODPRODUTO)
            A ordem das tabelas foi invertida mas o resultado é o mesmo. Observe mais alguns exemplos:
            SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO, B.QTDE
            FROM PRODUTOS A
            JOIN COMPONENTES B
            ON (A.CODIGO  = B.CODPRODUTO)
            WHERE A.CATEGORIA = 1
            SELECT A.CODIGO, A.DESCRICAO, B.DESCRICAO
            FROM PRODUTOS A JOIN COMPONENTES B
            ON (A.CODIGO = B.CODPRODUTO)
            WHERE A.CATEGORIA = 1 OR A.CATEGORIA = 2
            ORDER BY A.CATEGORIA, A.DESCRICAO

FULL OUTER JOIN
            Podemos ainda combinar o uso de INNER e OUTER através do comando FULL OUTER JOIN. Neste caso, todos os registros das duas tabelas envolvidas serão exibidas, tendo ou não relacionamento. Observe:
UNION
            Existe ainda uma segunda forma de juntar tabelas com o comando SELECT. Através do parâmetro UNION, é possível colar o conteúdo de duas tabelas. Veja o exemplo:
            SELECT CODIGO, NOME FROM CLIENTES
            UNION
            SELECT CODIGO. NOME FROM FUNCIONARIOS
            O resultado deste comando é a listagem de todos os clientes e a listagem de todos os funcionários, dentro do mesmo result set. Repare que no comando JOIN á união é horizontal e no UNION a união é vertical.
            Por default, os registros duplicados são eliminados na cláusula UNION. No exemplo anterior, se tivéssemos um cliente com o mesmo nome e código de um funcionário, apenas o registro da primeira tabela seria exibido. Para incluir todos os registros, independente de duplicidade, utilize a palavra ALL:
            SELECT CODIGO, NOME FROM CLIENTES
            UNION ALL
            SELECT CODIGO, NOME FROM FUNCIONARIOS

FUNÇÕES DE AGRUPAMENTO
            São cinco as funções básicas de agrupamento:
AVG: Retorna a média do campo especificado
SELECT AVG(VALOR) FROM PEDIDOS
MIN/MAX/SUM: Respectivamente retorna o menor valor, o maior e o somatório de um grupo de registros:
SELECT MIN(VALOR) FROM PEDIDOS
SELECT MAX(VALOR) FROM PEDIDOS
SELECT AVG(VALOR) FROM PEDIDOS
COUNT: Retorna a quantidade de itens da seleção:
            SELECT COUNT(CODIGO) FROM CLIENTES

AGRUPAMENTO
            Um poderoso recurso do comando SELECT é o parâmetro GROUPY BY. Através dele podemos retornar informações agrupadas de um conjunto de registros, estabelecendo uma condição de agrupamento. É um recurso muito utilizado na confecção de relatórios. Para exemplificar, temos as tabelas CLIENTES E PEDIDOS
            SELECT CODCLIENTE, MAX(VALOR)
            FROM PEDIDOS
            GROUP BY CODCLIENTE
            O comando acima retorna o maior valor de pedido de cada cliente. Observe o resultado:
            SELECT CODCLIENTE, COUNT(*)
            FROM PEDIDOS
            GROUPY BY CODCLIENTE
            Aqui vemos quantos pedidos foram feitos por cada cliente.

HAVING
            Através do comando HAVING podemos filtrar a cláusula GROUP BY.
            Observe o comando abaixo:
            SELECT CODCLIENTE, COUNT(*)
            FROM PEDIDOS
            GROUPY BY CODCLIENTE
            HAVING COUNT(*) >= 2
            Somente os clientes com 2 ou mais pedidos serão selecionados. Repare que o HAVING é utilizado, geralmente com alguma função de agrupamento. Para filtros normais, pode se utilizar o comando WHERE. Observe o exemplo abaixo:
            SELECT CODCLIENTE, COUNT(*)
            FROM PEDIDOS
            WHERE DATA > ‘06/10/2002’
            GROUPY BY CODCLIENTE
            HAVING COUNT(*) >= 2
                        Repare que o cliente número 3 apresentou apenas dois pedidos, visto que o primeiro não possui data maior que 06/10.


Principais Instruções SQL

Continue lendo
 

Java Aberto Copyright © 2011 -- Template created by O Pregador -- Powered by Blogger