Usando sockets em Java - Comunicação com um servidor

Publicado por Brenner Toledo em 05/09/2006

[ Hits: 24.370 ]

 


Usando sockets em Java - Comunicação com um servidor



Bom, estou aqui incluindo essa dica para quem ainda não sabe ou deseja aprender a usar Sockets na plataforma Java. Como estou montando um programa Java Cliente, essa dica vai ensinar a montar um Socket para comunicar-se com o Servido.
  • Socket => java.net.Socket; É o principal. Ele vai fazer a comunicação\conexão com o servidor.
  • BufferedReader => java.io.BufferedReader; É o que realizará a leitura de uma sentença mandada do Servidor, sendo de qualquer tipo: Integer, String, Char, Float, Boolean.. É importante ter noção que o programa pára para esperar a resposta. Ou seja, o comando readLine vai ficar no aguardo.
  • InputStreamReader => java.io.InputStreamReader; Será usado para ajudar na construção do BufferedReader; Não vai ter tanta importância nessa dica.
  • PrintWriter => java.io.PrintWriter; Este aqui mandará informações ao servidor. Usa-se o comando println para enviar uma linha texto (String).

Construindo o Socket:

Socket Conexao = new Socket(Servidor,Porta);

OBS: Quando o Socket é criado, ele automaticamente conecta. Se não conseguir conectar, ele cria uma excessão tipo IOException; Assim, deve-se usá-lo com a expressão try.

Construindo o BufferedReader:

BufferedReader input = new BufferedReader(new InputStreamReader(Conexao.getInputStream()));

OBS: Usamos o InputStreamReader apenas para criar, conforme dito antes. Conexao é o nome do Socket conectado.

Construindo o PrintWriter:

PrintWriter output = new PrintWriter(Conexao.getOutputStream(),true);

OBS: Conexão é o nome do Socket. O parâmetro true determina que o PrintWriter vai ser autoflush, ou seja, assim que o comando println for executado, ele automaticamente manda a mensagem para o Servidor, sem ter que usar o comando flush;

Segue abaixo uma classe exemplo de como usar o Socket. Tentei comentar o máximo possível para evitar dúvidas.

//as imports
import java.net.Socket;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.InputStreamReader;

public class ListProcess extends Thread {

    Socket conexao; //socket
    MeuFrame frame = new MeuFrame; //define e cria o Meu Frame

    public ListProcess() {
        //realiza a conexão no servidor local na porta 7847
        try {
        Socket conexao = new Socket("localhost", 7847 );
        } catch (IOException Ex) { //não consegui conectar
        this.interrupt();  // finaliza a Thread
        }

    }

    public void run(){ // para executar o processo
        if (conexao.isConnected() == true) { // se está conectado
            try {
                // criar os objetos que vão ler a entrada e saída do Socket
                BufferedReader input = new BufferedReader(new InputStreamReader(this.conexao.getInputStream())); //entrada

                PrintWriter output = new PrintWriter(this.conexao.getOutputStream(),true); // saída

                output.println("verprocessos"); // manda a mensagem pro servidor

                String Rc = "$beginlistprocess"; //nossa variável de controle do servidor
                
                //inicia um loop onde enquanto a mensagem não for a final e a conexão estiver ativa, ele inclui em uma lista no Frame os valores recebidos.
                while ((Rc!="$fimdalista")&&(Conexao.isConnected()==true)) {
                    //espera a resposta e coloca na variável
                    Rc=input.readLine();
                    //se a mensagem não é a final, então escreva na lista
                    if (Rc!="$endlistprocess")
                    //este item vai ser considerado Deprecation, mas ele funciona corretamente.
                    this.main.ListProcess.addItem(Rc);
                }
            } catch (Exception ex) { //se ocorrer alguma excessão.
            }
        }
    }
}

Espero ter ajudado.

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Sinal EOF ou EOT com sockets

Sistemas Distribuídos - Aplicação simples Java RMI

Transferência de arquivos binários em Java

Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]

Instalando Wireless 3945ABG no Debian Lenny Linux

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts