RMI - Como listar os clientes conectados?

3 respostas
muniquewassem

Boa noite,

Vim incomodar de novo! É o seguinte, estou desenvolvendo uma aplicação que lista os arquivos e subdiretórios do um diretório padrão, faz download de um arquivo e lista os usuários conectados a esse servidor. A parte de listar os arquivos e os subdiretórios e de fazer o download eu já fiz, mas empaquei na parte de listar os usuários.

Eu já tentei fazer, mas ainda não encontrei nenhuma maneira. O máximo que consegui fazer dar certo foi retornar o ip e o nome do próprio servidor com esse código:
public void usuario(){
        try {
            
            InetAddress localaddress = InetAddress.getLocalHost();
            System.out.println("Ip Host : " +localaddress.getHostAddress());
            System.out.println("Host: " + localaddress.getHostName());
           
        }
        catch (UnknownHostException e) {
            System.err.println("Can't detect localhost : " + e);
        }
    }

Existe algum método que eu possa usar, ou coisa assim?

3 Respostas

P

Bom dia,
bom, pelo que deu para entender o usuário terá que se identificar para obter o acesso ao diretório. O que você precisa fazer é armazenar os dados do cliente no momento do login em um local que você possa ter acesso.
Para remover o cliente (logout) basta sobrescrever o método finalize ou anotar um método com @PreDestroy (que é o mais adequado) no objeto que será retornado no método da identificação.
Com relação ao IP basta usar o método getClientHost.

Ex:

public Service login(String login, String password) throws RemoteException {

        Login id = new Login();
        id.setLogin( login );
        id.setPassword( password );

        try{
            id.setIp( getClientHost() );
        }
        catch( Exception e ){
            throw new RemoteException( e.getMessage(), e );
        }
        
        Authentication au = 
                (Authentication) BeanFactory
                    .getBean( LocalAuthentication.class.getSimpleName() );
        
        au.login( id );
        
        ?

        return service;
    }
public  class Service ...{

    private String login;

    public Service(String login)...{
        this.login = login;
    }

    ...

    @PreDestoy
    public void close(){
        Authentication au =
                (Authentication) BeanFactory
                    .getBean( LocalAuthentication.class.getSimpleName() );
        au.logout( login );
    }
}
muniquewassem

Olá plic_ploc.

Bem, não é bem assim. Não precisa de nenhuma autenticação não. É só pra conectar e ter acesso mesmo… o Cliente pode querer ver quem mais está conectado antes de fazer um download, por exemplo.
Estou tentando usar o getclienthost, mas não está funcionando como preciso…

Ivan_Alves

A idéia é mais ou menos esse que o plic_ploc disse você tem que criar um método que recebe como parâmetro o nome do usuário nesse método você guarda ele em uma Lista e também um método sair que recebe o mesmo parâmetro para remover o usuário da Lista.

Criado 3 de junho de 2011
Ultima resposta 4 de jun. de 2011
Respostas 3
Participantes 3