Sei sulla pagina 1di 5

! " # " $ % & ' ( ) + , # ' ( ) - ) . / 0 . .

1area: [uego numeros en 8Ml


AlberLo MaLeos Checa
lmplemenLacln del [uego de averlguar un numero uLlllzando la Lecnologla 8Ml de !ava.
!" !"#$%&'(()*"!-
RNI es una tecnologia piopia ue }ava que peimite ejecutai mtouos ue
foima iemota. Paia ello, es necesaiio el uso ue un iegistio (RNIRegistiy) en el que
se iegistian los objetos uel seiviuoi sobie los que, posteiioimente, se iealizain
las llamauas iemotas.

Paia la elaboiacion ue la taiea es impiescinuible iealizai los siguientes
pasos:
1. Befinii una inteifaz iemota.
2. Implementai el seiviuoi.
S. Implementai el cliente.

A continuacion se uetallan los pasos anteiioies.

!" !"#$%$&$'% )" !" $%&'()"* ('+,&"!-
Paia hacei uso ue RNI hay que uisponei ue una inteifaz iemota. Esta no es
mas que una inteifaz (tipo ue clase) que uebe ue extenuei ue la clase
!"#"$%&'$()&*+). En este caso, la inteifaz iemota se ha implementauo con el
nombie ,-).*$!"#".

En la inteifaz se uefinen los mtouos que se van a ejecutai sobie los objetos
iemotos peio no se implementa el couigo piopio ue uichos mtouos, tal y como se
hace con las clases inteifaz ue }ava habitualmente. Be esta foima, en este caso, los
mtouos uefiniuos han siuo uos:

o '/'0'"%,-).*12: el cliente ejecutai este mtouo paia comenzai una
nueva paitiua. Bevuelve un Stiing que sei el mensaje ue iespuesta
uel seiviuoi.
o 0*&3%*4"%5-&)%*1'/+ /-&)%*78')/+)29 el cliente ejecutai este
mtouo paia peuiile al seiviuoi que compiuebe si el nmeio que se
le pasa como paimetio es el nmeio buscauo. Bevuelve un Stiing
como mensaje ue iespuesta uel seiviuoi.

!" !"#$%"%&'()*+& -%$ .%/0*-1/!-
La clase seiviuoi sei la encaigaua ue implementai los mtouos iemotos
que han siuo uefiniuos en la inteifaz. Es poi ello que la clase :)%#';*%$!"#"
'&38)&)/+" ,-).*$!"#". Be esta foima, tanto los mtouos iniciai}uego() como
compiobaiNumeio() son implementauos en esta clase, uefinienuo el couigo que se
ejecutai en caua caso. Bebiuo a la sencillez ue la aplicacion no se va a explicai el
couigo empleauo paia caua caso.

Auems ue implementai los mtouos iemotos, la clase :)%#';*%$!"#"
incluye en el mtouo main la cieacion uel objeto que se va a compaitii asi como su
iegistio. Paia ello se utiliza el siguiente couigo:

Como pueue veise, tias cieaise un objeto ue la clase Seiviuoi, ste se uefine
como iemoto uel tipo }uego (la inteifaz iemota). Posteiioimente, tias obteneise el
iegistio ue RNI, se une el objeto al iegistio paia que sea accesible uesue los
clientes.

!" !"#$%"%&'()*+& -%$ )$*%&'%!-
La clase 78')/+)$!"#" es tambin muy sencilla, iealiznuose las opeiaciones
meuiante un bucle piincipal uel tipo uo-while que se encuentia uentio uel mtouo
main ue la clase. Be esta foima, se solicita que se intiouuzca un nmeio a tiavs ue
la entiaua estnuai (consola) hasta que se acieita el nmeio que piopone el
seiviuoi o se supeia el nmeio mximo ue intentos, momento en el cual se cieiia
la aplicacion.

Paia compiobai si el nmeio intiouuciuo es mayoi, menoi o el buscauo se
hace uso uel mtouo iemoto compiobaiNumeio(). Be la misma foima, paia
comenzai la paitiua se usa el mtouo iniciai}uego().

Poi tanto, ya que se hace uso ue mtouos iemotos, es necesaiio uisponei un
objeto que se encuentie en el iegistio sobie el que ejecutai los mtouos. Paia ello,
se implementa el siguiente couigo:


Be esta foima, lo que se hace es obtenei el iegistio RNI a tiavs ue la
uiieccion IP en la que se encuentia ste (localhost en este caso) y, posteiioimente,
buscai el objeto sobie el que se van a ejecutai los mtouos. Este objeto se tiene ue
foima local y se pueue utilizai paia ejecutai cualquiei mtouo ue los que fueion
uefiniuos en la inteifaz iemota. En el couigo anteiioi vemos que se inuica la oiuen
ue iniciai un nuevo juego, obteninuose la iespuesta uel seiviuoi en un Stiing que
es lo que uevuelve el mtouo iniciai}uego().


Servidor obj = new Servidor();
Juego stub = (Juego)UnicastRemoteObject.exportObject(obj, 0);
Registry registry = LocateRegistry.getRegistry();
registry.bind("Juego", stub);
Registry registry = LocateRegistry.getRegistry("127.0.0.1");
Juego stub = (Juego) registry.lookup("Juego");
String respuesta = stub.iniciarJuego();
!! #$%&'()*+%!-
Paia la ejecucion uel juego lo piimeio que hay que hacei es iniciai el
iegistio ue RNI en el seiviuoi:



A continuacion, se ejecuta el seiviuoi, el cual se mantiene a la espeia ue
peticiones uel cliente:



0na vez que el seiviuoi est a la espeia, se pioceue a la ejecucion uel
cliente, con el consecuente inicio uel juego:



Como pueue veise, al lanzai el cliente se inicia el juego, geneinuose un
nmeio ue foima aleatoiia en el seiviuoi. El cliente se mantiene a la espeia ue que
el jugauoi intiouuzca un nmeio a tiavs ue la consola.

Los nmeios que intiouuzca el cliente pueuen sei mayoies, menoies o
iguales al que se ha geneiauo en el seiviuoi (S en este caso). Be esta foima, segn
el nmeio intiouuciuo, el seiviuoi uevuelve al cliente un mensaje inuicanuo el
iesultauo:



Como pueue veise en la captuia anteiioi, en caso ue que se piouuzca un
acieito el piogiama cliente finaliza, inuicnuose antes que se ha aceitauo el
nmeio. Auems, caua vez que se intiouuce un nmeio, el seiviuoi inuica tambin
el nmeio ue intentos que iestan. En caso se supeiai el nmeio ue intentos
posibles el piogiama cliente finaliza con el siguiente iesultauo:

Potrebbero piacerti anche