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