Socket e Interfaces

Olá pessoal.

Eu tenho um aplicativo java que abre um socket de acesso para que clientes possam se conectar nele. Segue abaixo o código:

/**
 *
 * @author Valdinei F. Lima
 */

import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;


public class BlueBOXComponente extends Thread {
    private Socket conexao;

    public BlueBOXComponente( Socket s) {
      conexao = s;
    }
    
    public static void geraLog( String a, String m ) throws IOException  {
        /* 
         * aplicativo.log
         * acesso.log
         * erro.log
         */
        SimpleDateFormat mData  = new SimpleDateFormat("dd/MM/yyyy");  
        SimpleDateFormat mHora  = new SimpleDateFormat("HH:mm:ss"); 
        String eData            = null;
        String eHora            = null;
        eData                   = mData.format(new Date());
        eHora                   = mHora.format(new Date());
        File        arquivo     = new File("/box/log/" + a);
        FileWriter  gravar      = new FileWriter(arquivo,true);
        PrintWriter mensagem    = new PrintWriter(gravar,true);
        mensagem.println( "[ " + eData + " - " + eHora + " ] @ " + m );
    }

    public static void main(String args[]) throws IOException {
        String ipServidor = args[0];
        try {
            ServerSocket s = new ServerSocket(2712);
            geraLog("aplicativo.log","[ BlueBOX Componente ] @ [ Servidor.: "+ ipServidor +" ]");

            while (true) {
                Socket conexao = s.accept();
                if (conexao.getInetAddress().getHostAddress().equals( ipServidor )) {
                    Thread inicia = new BlueBOXComponente( conexao );
                    inicia.start();                    
                    geraLog("acesso.log","[   OK   ] "+ conexao.getInetAddress().getHostAddress());
                }else{
                    conexao.close();
                    geraLog("acesso.log","[ FALHOU ] IP negado { "+ conexao.getInetAddress().getHostAddress() +" } Tentativa de conexão recusada.");
                }
            }
            
        }
        catch (IOException e) {
            geraLog("erro.log","[ IOException ] " + e);
        }
    }
   
    
    
}

quando eu executo esse programa: java -jar BlueBOX_Componente 127.0.0.1

ele abre a porta 2712 para acesso dos clientes. Eu fiz o teste usando o telnet para acessar e funcionou certinho!

Agora eu preciso fazer com que um cliente envie uma classe para este socket server e ele execute a classe que o cliente enviou. Como eu faria isso?

Abraços

Cara, nunca fiz isso que você está querendo, mas esse não seria o caso de somente você enviar o “.java” bit a bit para o socket server e lá você compila e executa a classe??
Ou simplesmente envia logo o arquivo “.class” no lugar do seu próprio fonte??

[]'s.

Algumas alternativas:

  1. Use RMI;
  2. Mande os dados do que deve ser criado, e deixe que o servidor crie;
  3. Use o ObjectInputStream e o ObjectOutputStream;
  4. Ao invés de mandar uma classe java, mande o texto de uma classe Groovy. É muito fácil compilar Groovy na outra ponta;

Eu estava pensando em usar esta função mesmo.

Algum exemplo?

Valeu pela atenção

???