Servidor IRC Simple

En esta página doy las indicaciones para compilar y ejecutar un servidor simple de Irc y sus clientes. Este servidor es simple porque el servidor no requiere recuperar clases provistas por el cliente. Por supuesto, el cliente sí requiere recuperar los stubs del servidor para poder invocar los métodos del servidor Irc.

Está compilación/ejecución supone un esquema del tipo Single Program Multiple Data: un solo código de programa con multiples instancias de ejecución. Para lograrlo se debe distribuir en un archivo .jar todo el código de la aplicación, tanto el cliente como el servidor. Este archivo deberá instalarse tanto en la máquina en donde se lanzará el servidor como en las máquinas en donde se ejecutarán los clientes.

Instalación de JDK1.2

Asegúrese de que JDK1.2 está instalado en las máquinas en donde piensa ejecutar el registro de objetos remotos (rmiregistry), el servidor y los clientes. JDK1.2 debe estar en primer lugar en el path de búsqueda de comandos. Para esto coloque la siguiente línea en el .cshrc (o su equivalente en .xxxrc):

    set path=(/usr/local/java1.2/bin $path)
Reemplace /usr/local/java1.2 por el directorio en donde se encuentra JDK1.2 en su máquina.

Verifique que la versión accesible de java es la 1.2 ejecutando el comando java -version. En Solaris el resultado de este comando es:

    % java -version
    java version "1.2.1"
    Solaris VM (build Solaris_JDK_1.2.1_03, native threads, sunwjit)
Todos los programas que usa este ejemplo deben ser ejecutados con JDK 1.2. No mezcle procesos que usan JDK1.2 con otros que usan JDK1.1.

El servidor y los clientes

Elija un directorio en donde colocar tanto el servidor como los clientes. Baje los siguientes archivos a ese directorio:

Compilación

Compile todos los programas usando javac:

    % javac IrcServerImpl.java IrcReader.java IrcWriter.java
Asegurese de situarse en el directorio en donde bajo los archivos y que la variable CLASSPATH incluye el directorio ".".

Generación de los stubs y skeletons

    % rmic -d . IrcServerImpl
    % ls
    ... IrcServerImpl_Skel.class IrcServerImpl_Stub.class ...
Los stubs y skeletons se encargan de establecer una conexión entre los clientes y un objeto remoto. Los stubs corren en la parte cliente y los skel en el servidor. Observe que los fuentes de stubs y skels son borrados (porque no se necesitan).

Generar una distribución de los clientes y el servidor

Utilice el comando jar para generar un archivo compacto con todas las clases que se necesitan para ejecutar tanto el servidor como los clientes:

    % jar cvf irc.jar *.class
    added manifest
    adding: IrcReader.class(in = 1305) (out= 735)(deflated 43%)
    adding: IrcServer.class(in = 322) (out= 215)(deflated 33%)
    adding: IrcServerImpl.class(in = 1720) (out= 938)(deflated 45%)
    adding: IrcServerImpl_Skel.class(in = 2156) (out= 1179)(deflated 45%)
    adding: IrcServerImpl_Stub.class(in = 4075) (out= 1971)(deflated 51%)
    adding: IrcWriter.class(in = 1311) (out= 755)(deflated 42%)
    %
Compruebe que el archivo contiene todas las clases necesarias:

    % jar tvf irc.jar
    ...
    %
Este archivo debe ser colocado en cualquier máquina en donde desee ejecutar ya sea el servidor como los clientes y debe ser especificado en la variable CLASSPATH.

Lanzamiento del registro de objetos remotos

En una ventana de su propia estación (y no en anakena) ejecute el comando rmiregistry. Asegúrese que los stubs del servidor o los clientes sean accesibles por el rmiregistry. Para esto basta ejecutar:

    % setenv CLASSPATH .../irc.jar
    % rmiregistry
En donde "..." es el directorio en donde colocó el archivo irc.jar.

Ejecución del servidor

    % setenv CLASSPATH .../irc.jar
    % java IrcServerImpl
    IrcServer registered

Ejecución de un lector

Los clientes pueden ser ejecutados en cualquier máquina que tenga JDK1.2 y que esté conectada a Internet, por ejemplo en anakena u otra estación. Supongamos que Ud. ejecuta el cliente en la máquina borg.

    % setenv CLASSPATH .../irc.jar
    % java IrcReader borg
    //borg/IrcServer got.  Next message will have id 0
Los mensajes aportados a la conversación aparecerán en el futuro en esta ventana.

Ejecución de un escritor

Ejecute las siguientes instrucciones en una nueva ventana:

    % setenv CLASSPATH .../irc.jar
    % java IrcWriter borg juan
    //borg/IrcServer got.
    ?
Como seguramente Ud. ha encontrado algún error que impide hacer la conexión revise cuidadosamente cada uno de los pasos señalados en esta página. ¡Cuidado! Aún cuando el servidor logró conectarse, el error puede estar en la forma en que lanzó el servidor. Revise también esos pasos.

Envíeme vía mail su error favorito para colocarlo en esta página.