Criando um VNC em Java
Olá, espero com esse post mostrar o funcionamento de um VNC VIEW básico em que um computador conecta à um outro computador remoto e então captura todas as telas que estão sendo visualizadas pelo computador host.
A idéia é bastante simples, basicamente transformar a imagem capturada pelo toolkit java, codificá-lá em um algoritmo (JPEG, GIF, PNG, etc...),transformá-lá em um array de bytes e enviar para rede. Do outro lado o computador que recebe as imagens só basta transformar o array de bytes em imagem e dá um repaint() na tela em um JFrame.
Essa ferramenta pode ser bem útil em aulas.
Apesar da simplicidade, vários outros aspectos podem ser levados em consideração tornando o projeto mais complexo como por exemplo capturar eventos do mouse e enviar para o computador que recebe as imagens como também criar agentes ativos que identifica computadores disponíveis para receber as imagens e então o computador host enviar para todos ao mesmo tempo em broadcast.
Imagem do funcionamento do programa
Palavras-chave: Java, VNC
Criando o projeto
- Vamos criar um JFrame bastante simples, cujo objetivo é mostrar a tela capturada no outro computador. A imagem a seguir demostra tal tela.
- Criando o núcleo da aplicação
Vamos criar uma class Server. Usando um contexto que "server" será responsável por deixar a máquina disponível para receber imagens de um suposto "cliente" em que o "cliente" enviará as imagens para este "server". Um exemplo um computador A e um computador B, sendo o A o server então é nele que irá aparecer as imagens que estão sendo transmitida pelo computador B.
Criando o Server
Iremos criar a Class Server herdando de Thread, pois ela será responsável por abrir a conexão do socket de rede e esperar requisições. Quando uma requisição for enviada o método RUN da Thread é executado fazendo a operação de receber os Bytes enviado pelo "Client" e transformando em Image (BufferedImage).
public class VirtualSchoolServer extends Thread {
private Socket socket;
private FmPrincipal fmChamado;
public VirtualSchoolServer(Socket cliente) {
setSocket(cliente);
}
No construtor enviamos um Socket responsável por abrir a conexão (Cliente). Esse FmPrincipal é o frame que exibirá a imagem. Ou seja, FmPrincipal e Server irão rodar juntos, quando o Server receber uma imagem enviará para o FmPrincipal e entao termina sua execução fechando a conexão e então abrimos uma nova Thread Server que espera indefinidamente até que o Client envi uma conexão.
No método public void run() iremos transformar os bytes recebidos no socket e transformá-lo em BufferedImage. O código abaixo demostra como fazer isso.
|
Criando a aplicação Cliente
Como explicado mais a cima, a aplicação cliente será responsável por enviar as imagens para o "server" para que este possa exibir as imagens recebidas. O código abaixo mostra como fazer isso.
|
Criando a aplicação que dá um START no FmPrincipal e chama o "Server"
|
Método capturaImage() FmPrincipal
|
3 Responses to Criando um VNC em Java
Excelente teu site, cheio de informações bastante úteis para nós da área de TI, além desses ótimos tutoriais. Parabéns pelo seu esforço e dedicação!
Obrigado pelo comentário. Estou tentando melhorar aos poucos =D, obrigado
Teria como disponibilizar o código fonte teste artigo?
Grato.
Something to say?