Blogger templates

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

Visitas

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

quarta-feira, 26 de dezembro de 2012

Usando ArrayList

,



  1. import java.util.ArrayList;  
  2. import java.util.Arrays;  
  3. import java.util.Collection;  
  4. import java.util.Collections;  
  5. import java.util.Iterator;  
  6. import java.util.LinkedList;  
  7. import java.util.List;  
  8.   
  9. public class ExemploLista {  
  10.    public static void main(String[] args) {  
  11.        //Primeiro criamos um ArrayList.   
  12.        List<String> umaLista = new ArrayList<String>();  
  13.          
  14.         //Para adicionar elementos ao final da lista, usamos o método add  
  15.         umaLista.add("Vinícius");  
  16.         umaLista.add("De");  
  17.         umaLista.add("Mendonça");  
  18.         imprime("Após adicionar os primeiros elementos", umaLista);  
  19.   
  20.         //Também podemos adicionar um elemento numa posição qualquer da lista  
  21.         umaLista.add(1"Godoy");  
  22.         imprime("Após adicionar Godoy na posição 1", umaLista);  
  23.   
  24.         umaLista.add("Garcia");  
  25.         umaLista.add("Menezes");  
  26.         imprime("Após adicionar Garcia e Menezes na lista", umaLista);  
  27.   
  28.         //Podemos obter o tamanho da lista chamando o método size()  
  29.         System.out.println("O tamanho da lista é: " + umaLista.size());  
  30.           
  31.         //Podemos acessar um elemento da lista usando get. Note que o índice das  
  32.         //listas começa em 0.  
  33.         System.out.println("O 4º elemento da lista, de índice 3 é: " + umaLista.get(3));  
  34.           
  35.         //Podemos ver se existe um determinado valor na lista  
  36.         if (umaLista.contains("Godoy"))  
  37.             System.out.println("Godoy está lá!");  
  38.         else  
  39.             System.out.println("Godoy não está lá!");  
  40.           
  41.         if (umaLista.contains("Braga"))  
  42.             System.out.println("Braga está lá!");  
  43.         else  
  44.             System.out.println("Braga não está lá!");  
  45.           
  46.         //Podemos descobrir qual é o índice de um elemento da lista  
  47.         int indiceDe = umaLista.indexOf("De");  
  48.         System.out.println("O índice de 'De' é:" + indiceDe);  
  49.   
  50.         //Dá também para remover um elemento da lista com remove  
  51.         umaLista.remove("Garcia");  
  52.         imprime("Removemos Garcia", umaLista);  
  53.   
  54.         //Remove também aceita um índice!  
  55.         umaLista.remove(umaLista.size()-1); //Remover o último elemento  
  56.         imprime("Removemos a lista na posição " + (umaLista.size()) + ": ", umaLista);  
  57.   
  58.         //Podemos ordenar a lista, desde que a classe dentro dela seja Comparable:  
  59.         Collections.sort(umaLista);  
  60.         imprime("Lista ordenada", umaLista);  
  61.   
  62.         //É possível criar cópias da lista em praticamente qualquer estrutura:  
  63.         List<String> outraLista = new LinkedList<String>(umaLista);   
  64.         imprime("Impressão da outra lista", umaLista);  
  65.         outraLista = null;  
  66.   
  67.         //Podemos também remover todos os elementos da lista  
  68.         umaLista.clear();  
  69.   
  70.         //Podemos criar uma versão imodificável da lista  
  71.         outraLista = Collections.unmodifiableList(umaLista); //Não é uma cópia!  
  72.         try {  
  73.            outraLista.add("Menezes de Barros");  
  74.         } catch (UnsupportedOperationException e) {  
  75.            System.out.println("Ops... não dá para inserir!");  
  76.         }  
  77.           
  78.         //Podemos transformar um arrayQualquer numa lista  
  79.         String[] frutas = new String[] {"Banana""Maçã""Banana""Laranja""Banana"};  
  80.         List<String> listaFrutas = Arrays.asList(frutas);  
  81.         imprime("Lista de frutas", listaFrutas);  
  82.           
  83.         //E podemos adicionar uma lista inteira dentro de outra  
  84.         umaLista.add("Pera");  
  85.         umaLista.add("Goiaba");  
  86.         umaLista.addAll(listaFrutas);  
  87.           
  88.         imprime("Lista de frutas com frutas de umaLista", umaLista);  
  89.           
  90.         //Há também métodos para remover todos os que forem iguais(removeAll),   
  91.         //manter todos os que forem iguais (retainAll)  
  92.         //ou ver se todos os elementos de uma lista estão em outra (containsAll)  
  93.         umaLista.retainAll(listaFrutas); //Mantém só as frutas que estiverem em listaFrutas  
  94.         imprime("Lista após a remoção", umaLista);  
  95.           
  96.         //Você também pode usar o iterador para remover um elemento enquanto   
  97.         //percorre a lista. Por exemplo, vamos remover as bananas:          
  98.         Iterator<String> it = umaLista.iterator();  
  99.         while (it.hasNext()) //Enquanto temos elementos da lista  
  100.         {  
  101.             String fruta = it.next(); //Obtemos o próximo elemento  
  102.             if (fruta.equals("Banana")) //Estamos na banana?  
  103.                 it.remove();            //Removemos!  
  104.         }  
  105.         imprime("Uma lista sem bananas", umaLista);          
  106.     }  
  107.   
  108.    //Podemos percorrer todos os elementos de qualquer coleção (inclusive List), usando o for each.  
  109.    public static void imprime(String titulo, Collection<String> collection) {  
  110.       System.out.println();  
  111.       System.out.println(titulo + ":");  
  112.       for (String str : collection) {  
  113.          System.out.println(str);  
  114.       }  
  115.       System.out.println();  
  116.    }  
  117. }  
Continue lendo
 

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