Pessoal eu tenho um método aqui que imprime o valor correto da votação na mesma classe Servidor, só pq quero imprimir o resultado no cliente so pq chamo o msm metodo so que nao funciona, ja fiz de tudo aqui e ele nao imprime no Cliente.
esse é o metodo.
Como está fazendo a comunicação do código cliente com o código do servidor?
Alberto_junior
amigo vou postar a classe que pediu aqui certo?
Alberto_junior
mais é o seguinte, quando chamo o metodo para imprimir no cliente ele imprime é no servidor, apaguei a opcao de imprimir no servidor ai ele nao imprime, mais se eu chamar o metodo no cliente, so de ele imprimir no propio cliente, ele imprime é no servidor. Dar para entender?
Alberto_junior
classe servidor
`publicclassServidorimplementsRunnable{privateUrnaurna;@Overridepublicvoidrun(){try{this.urna=this.prepararUrna();LocateRegistry.createRegistry(1099);Naming.rebind("rmi:///Urna",this.urna);System.out.println("urna@localhost$> Urna iniciada, pronta para receber votos!");}catch(RemoteException|MalformedURLExceptionex){System.err.println(ex);System.exit(1);}}privateUrnaprepararUrna()throwsRemoteException{finalStringcandidatos="João:10,Maria:20,Jean:30,Alex:40,Rubens:50";finalUrnaurnaVazia=newUrna();finalStringcomando=candidatos;if(comando!=null&&!comando.isEmpty()){finalString[]arrayCandidatos=comando.split(",");for(StringdadosCandidato:arrayCandidatos){finalStringnome=dadosCandidato.split(":")[0];finalStringnumero=dadosCandidato.split(":")[1];urnaVazia.adicionaCandidato(newCandidato(nome,Integer.parseInt(numero)));}}this.mostrarCandidatos(urnaVazia);returnurnaVazia;}privatevoidmostrarCandidatos(Urnaurna)throwsRemoteException{System.out.println("urna@localhost$> Candidatos disponiveis para votação:");finalSet<Candidato>candidatos=urna.getCandidatos();candidatos.stream().forEach((candidato)->{System.out.println(String.format("-> Nome %s, número %s",candidato.getNome(),candidato.getNumero()));});}publicstaticvoidmain(String[]args){EventQueue.invokeLater(newServidor());}
LocateRegistry.getRegistry(1099);System.out.println("conectado ao servidor");urna=(IUrna)Naming.lookup("rmi://localhost/Urna");urna.PegarIP(ipCliente);}catch(Exceptionex){System.err.println(ex);System.exit(1);}this.capturarVotos();}publicvoidcapturarVotos(){booleanexit=false;try{finalScannerteclado=newScanner(System.in);System.out.println("############SISTEMA DE VOTAÇÃO############");System.out.println("## Escolha um candidato e em seguida ##");System.out.println("## digite o numero correspondente a ele ##");System.out.println("## para contabilizar 1 voto ##");while(!exit){System.out.println("\n## Candidatos ##");this.mostrarCandidatos();System.out.println("################");System.out.print("cliente@"+ipCliente+"$> ");Stringvoto=Console.readCommand(teclado);Integernumero=Integer.parseInt(voto);while(numero!=10&&numero!=20&&numero!=30&&numero!=40&&numero!=50){System.err.println("Voto Inválido,informe um número correto!");numero=teclado.nextInt();}try{if(urna.PegarIP(this.ipCliente)){System.err.println("Eleitor ultrapassou limite de votação");this.urna.calcularParcial();//metodo que calcular o parcialbreak;}else{this.urna.votar(numero);System.out.println("Voto computado!");this.urna.calcularParcial();//metodo que calcular o parcial}}catch(NumberFormatExceptionex){System.err.println("cliente@localhost$> formato de voto invalido!");}}}catch(Exceptionex){System.err.println(ex);}}privatevoidmostrarCandidatos()throwsException{finalSet<Candidato>candidatos=this.urna.getCandidatos();candidatos.stream().forEach((candidato)->{System.out.println(String.format("-> Nome %s, número %s",candidato.getNome(),candidato.getNumero()));});}publicstaticvoidmain(String[]args){EventQueue.invokeLater(newCliente());}
}
`
Solucao aceita
staroski1 like
Bom, você está usando objetos distribuídos (no caso com o protocolo RMI)
O código mostrarCandidatos está implementado no servidor, ele faz println das suas informações, esses println evidentemente serão impressos no servidor, que é justamente onde seu código está executando.
Se você quer imprimir essas informações no cliente, então você precisa serializar as informações para seu cliente (pode fazer seu método retornar uma lista com os objetos, ao invés de ser void) e implementar esses println no cliente também.