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
Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]
Sistemas Distribuídos - Aplicação simples Java RMI
Sinal EOF ou EOT com sockets
Transferência de arquivos binários em Java
Dependências circulares com RPM
Comentários
Nenhum comentário foi encontrado.
Patrocínio
Destaques
Artigos
Dicas
Tópicos
Top 10 do mês
Scripts
|