Ola a todos,
eu consigo enviar infomação do servidor para cliente. É possivel um cliente rmi enviar uma string contendo um nome para o servidor rmi?
Grato
Antonio
Ola a todos,
eu consigo enviar infomação do servidor para cliente. É possivel um cliente rmi enviar uma string contendo um nome para o servidor rmi?
Grato
Antonio
String não tenho certo mas objeto sim, não me recordo muito bem como fazer, pois faz algum tempo que não utilizo RMI, porém tenho certeza que é possivel um cliente enviar um objeto para o servidor, este objeto deve ser serializable.
Caro antoniosales,
Não tenho certeza, mais se me lembro é mais ou menos assim, você deve ter a mesma interface do servidor no seu cliente RMI, importante que os pacotes também tenham o mesmo nome, então você faz um lookup no IP do servidor para iniciar esta interface, depois voce faz interface.enviarObject(Object), assim o seu objeto já vai para o servidor, é só fazer o tratamento necessario
Sabendo que tem como, vamos atras do procedimento.
Teria um exemplo para ilustrar essa ideia, ta dificil de encontrar no google.
Caro antoniosales,
Da uma olhada neste link,
http://www.guj.com.br/posts/list/122802.java#666323
//variavel RMI
LocateRegistry registry;
//bsucando o servidor, se o serviço esta ativo ou não
registry = LocateRegistry.getRegistry(IPdoServidor, PortaDoServidor);
//Jogo é uma interface que não será implementada pelo seu cliente, apenas existirá no cliente
// ele é iniciada através do metodo lookup em uma variavel do tipo Registry, que possui os dados do servidor
// deve-se passar o nome do objeto RMI em instancia para efetuar a busca
Jogo jogo;
jogo = (Jogo) registry.lookup("jogo");
//após busca feita é so chamar o metodo da interface
jogo.cadastrarJogador(jogador);
exemplo adaptado do link que te passei, porém como dito antes, não tenho certeza que seja bem assim, mas se não for é bem parecido
O servidor pega as informações de uma base dados coloca em ArrayList e envia para o cliente
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
public class Client {
public static void main(String[] args) throws java.net.UnknownHostException {
StringBuilder imprimi = new StringBuilder();
ArrayList<String> Dadosimpressao = new ArrayList<String>();
try {
Registry registry = LocateRegistry.getRegistry("192.168.0.215", 1099);
Interface obj = (Interface) Naming.lookup("rmi://192.168.0.215:1099/ObjetoServer");
ArrayList<String> impressao = new ArrayList<String>();
impressao = obj.passArrayList(Dadosimpressao);
for(int i=0; i<impressao.size(); i++){
imprimi.append(impressao.get(i)).append("\r\n");
}
System.out.println(imprimi);
}catch(Exception e) {
System.out.println("Ocorreu uma exceção");
System.out.println (java.net.InetAddress.getLocalHost() );
e.printStackTrace();
}
}
}
Aqui é o metodo main do servidor
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Registry registry = null;
try {
registry = LocateRegistry.createRegistry(1099);
} catch (RemoteException e) {
try {
registry = LocateRegistry.getRegistry();
} catch (RemoteException e2) {
System.err.println("Registro não pode ser inicializado");
System.exit(0);
}
}
try {
System.setProperty( "java.rmi.server.hostname", "192.168.0.215" );
ServerImpl obj = new ServerImpl("ObjetoServer");
registry.bind("ObjetoServer", obj);
System.out.println("ServidorRMI foi criado e registrado");
}
catch(Exception e) {
System.out.println("Ocorreu uma exceção no servidor");
e.printStackTrace();
}
}
Caro antoniosales,
A ideia esta certa, porém acredito que no metodo
Naming.lookup("rmi://192.168.0.215:1099/ObjetoServer");
Se me lembro voce deve passar apenas o nome do objeto sem o ip do server, assim
Naming.lookup("ObjetoServer");
se estiver dando algum erro posta o erro ai para tentar te ajudar