Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Sunday, August 22, 2010

Cómo abrir una sesión FTP en Batch







En varias ocasiones me han preguntado vía Email, cómo realizar un proceso FTP en BATCH tomando en cuenta que requerimos el usuario y la clave para abrir la sesión FTP.

En esta oportunidad les adjunto tres programas que son útiles para generar comandos FTP batch manejando el tema del usuario y la clave.

La idea es tener un archivo donde se graban los comandos FTP.

En este caso el archivo se llama FTPPAS, es un archivo que no tiene DDS sino que se crea con CRTPF con un largo de 132 posiciones. EL objeto del archivo se crea dinámicamente a tiempo de ejecución en la librería QTEMP. Esto es para no embasurar el disco. Una vez terminado el proceso el sistema operativo elimina el archivo al terminar el job.

El primer programa: PROGRAMA1 es un CLP.

1.-Verifica si existe el archivo FTPPAS en QTEMP, si no existe lo crea
2.-Luego llama a un programa RPG que se encarga de grabar en el archivo FTPPAS, cada comando FTP.

Notaras que la llamada al programa oprpg501 tiene en sus dos parámetros el usuario y la clave respectivamente.

La clave puedes preguntarla por pantalla al usuario, que va a ejecutar esto o tenerlos guardados en una dataara en un archivo, colocarlos en el programa directamente, como tu prefieras.

Existe un comando llamado CHKPWD. A ese comando le pasas el password que el usuario colocó en pantalla y el sistema operativo chequea si en verdad corresponde al password del usuario que está realizando la solicitud en pantalla, si no es así, se monitorea el error y se manda un mensaje de error.
Si no dispones de este comando en tu equipo, en el link al final de este artículo puedes descargar una utilidad que se encarga de realizar esta verificación.


IF COND(&IN03 = '1') THEN(GOTO FIN))


CHKPWD PASSWORD(&PSW) MONMSG
MSGID(CPF2362 CPF2363 CPF2364 CPF0001) EXEC(DO) CHGVAR VAR(&MSG) VALUE('La contraseña ingresada no +
                         corresponde al perfil del usuario')
GOTO LAZO2
ENDDO

FIN: ENDPGM

El tercer parámetro es la dirección IP con la cual se va a realizar la conexión, el cuarto y quinto parámetro es el nombre del archivo de salvar (donde está la data) y la librería del archivo de salvar. En este ejemplo se trata de enviar un SAVF desde un AS/400 hacia un PC.

3.-Por ultimo el programa llama a un CLP el cual se encarga de realizar efectivamente la serie de comandos FTP enviando la data.


El segundo Programa: PROGRAMA2 es un RPG.

Este Programa graba en el archivo FTPPAS y es llamado por el programa anterior.

Resalté en amarillo las instrucciones que interesan. Como puedes ver, arma cada instruccion FTP y hace WRITE al archivo FTPPAS.


El Tercer Programa: PROGRAMA3 es un CLP

Este programa es llamado por el primer programa y ejecuta el comando STRTCPFTP con parámetro la dirección IP.

Veras que se hace un override sobre el FTPPAS y que se crea un nuevo archivo llamado FPPASOUT sobre el cual también se hace override. Este archivo es también un físico sin dds de 132. En este archivo va a quedar un LOG para ti que puedes revisar después para saber si el proceso corrió bien o no. Es un log con todos los mensajes que envía el sistema operativo cada vez que ejecuta un comando FTP y puedes ver si fue satisfactorio o no.

Se crea en QTEMP para no embasurar el sistema. EL FTPPAS sirve como INPUT al comando STRTCPFTP y el FTPPASOUT sirve como output del log de ejecución. Este archivo FTPPASOUT es muy útil si quieres probar el programa interactivo primero y ver si corre bien. Vas mirando con un SQL o con un DSPPFM los mensajes que deja y así te aseguras que el proceso esta funcionando antes de ponerlo en producción como un proceso batch.

Puedes descargar los fuentes mencionados en este link:

http://cid-99e67619d21bbebb.office.live.com/browse.aspx/FTP%20BATCH


Autor: Ing. Liliana Suárez.


Si te pareció interesante el artículo reenvíalo a un amigo, haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.

Thursday, August 12, 2010

Flujo de eventos para una conexión con socket




        
















(Haz Click para agrandar la imágen)


En la imágen podemos ver el flujo de eventos en una comunicación con Sockets. A continuación describimos las diferentes funciones (comandos) que son invocados dentro del programa RPG para establecer una comunicación entre el programa cliente y el programa servidor.


                                                                            
1.- La function SOCKET() crea un punto de conexión para comunicaciones y regresa un numero entero que representa el descriptor del socket. Un descriptor identifica de manera univoca a un Socket.


2.-Cuando una aplicación tiene un descriptor de socket, esta aplicación  puede asociar un nombre de socket único para ser accesible en la red. Para crear este nombre de red se utiliza bind().


Avisar al sistema operativo de que hemos abierto un socket y queremos que   asocie nuestro programa a dicho socket, se  consigue mediante la función bind(). El sistema todavía no atenderá a las conexiones de clientes, simplemente anota que cuando empiece a hacerlo, tendrá que avisarnos a nosotros. Es en esta llamada cuando se debe indicar el número de servicio al que se quiere atender.


3.-La función listen() indica la disponibilidad de aceptar conexión con  solicitudes de cliente. La funcion listen() debe ser emitida luego de crear una conexión bind() y antes de un accept(). Avisar al sistema de que comience a atender dicha conexión de red se consigue mediante la función listen(). A partir de este momento el sistema operativo anotará la conexión de cualquier cliente para pasárnosla cuando se lo pidamos. Si llegan clientes más rápido de lo que somos capaces de atenderlos, el sistema operativo hace una "cola" con ellos y nos los irá pasando según vayamos pidiéndolo


4.-La función connect() establece una conexión con el servidor


5.-La función Accept()  acepta la conexión con el cliente.  Esta función le indica al sistema operativo que nos dé al siguiente cliente de la cola. Si no hay clientes se quedará bloqueada hasta que algún cliente se conecte.


6.-Una vez establecida la conexión, el cliente y el servidor  pueden seleccionar funciones de transmisión o envío de data como send(), recv(), read(), write()




7.-Cuando un servidor o cliente terminan la conexión deben emitir la función close()           


Bibliografía en la web:

www.Wikipedia.com


Autor: Ing. Liliana Suárez.

Si te pareció interesante el artículo reenvíalo a un amigo, haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.

Sunday, August 1, 2010

¿Que es un Socket?













                                                                                      (Click en la imagen para agrandarla)

Un Socket es un punto de conexión de comunicaciones que posee un nombre y dirección en una red. Digamos que actua como “un enchufe virtual” que permite el envío y la recepción de data en un entorno de red.

Una forma de conseguir que dos programas se transmitan datos, basada en el protocolo TCP/IP, es la programación de sockets. Un socket no es más que un "canal de comunicación" entre dos programas que corren sobre ordenadores distintos    o incluso en el mismo ordenador.

Desde el punto de vista de programación, un socket no es más que un "archivo" que se abre de una manera especial. Una vez abierto se pueden escribir y leer datos de él con las habituales funciones de read() y write() del lenguaje C. (en RPG se invoca a procedures realizados en C) Hablaremos de todo esto con detalle más adelante.

 Los procesos que usan un socket pueden residir sobre el mismo sistema o en  sistemas diferentes sobre diferentes redes. Los Sockets son útiles porque  permiten
 cambiar la información entre procesos sobre la misma máquina o a través de una red, distribuir el trabajo a la máquina más eficiente, y permite al acceso a datos centralizados fácilmente.. OS/400 soporta sockets de múltiples transportes y protocolos conectados a una red.
 Los Sockets comúnmente son usados para la interacción de cliente/servidor. La configuración de sistema típica coloca al servidor sobre una máquina, con los clientes sobre otras máquinas. Los clientes se unen al servidor, cambian la información, y luego se desconectan.

LA CONEXIÓN

Para poder realizar la conexión entre ambos programas son necesarias varias cosas:
·         Dirección IP del servidor.
·         Servicio que queremos crear / utilizar.


Un servicio es una comunicación a la cual le asignamos un nombre y le asociamos un puerto de conexión.
Nosotros elegimos el número del puerto. Se recomienda elegir números de 7001 en adelante. Cuando abrimos la comunicación en un programa RPG o en C, mediante una instrucción BIND debemos especificar en este comando el nombre del servicio para que mediante este nombre el sistema operativo acceda al número del puerto que definimos en las tablas. En otro tipo de programación en vez del nombre del servicio, se requiere directamente el número de puerto.

 Es a través de este “enchufe” virtual que creamos con el comando ADDSRVTBLE  que hace que nos aparezca la pantalla que está adjunta en este artículo cuando especificamos el servicio y el puerto.
 El programa que reside en la máquina cliente y el programa que reside en el servidor envían y reciben data en forma única. Es decir, no se está mezclando data de otros servidores ni de otros clientes, puesto que los programas que están instalados en ambos equipos abrieron la comunicación con este número de puerto establecido por convención previa en el código de programación.

Si se desea ofrecer otro servicio a otro cliente por este mismo servidor, se declara otro puerto y servicio en la tabla y esos otros  programas de comunicación envían y reciben data a través de este otro servicio.

Para el próximo artículo veremos mas detalles del cliente y el servidor, y los comandos Sockets dentro de los programas.

Si quieren bajar programas que manejan  socket realizados en RPG pueden leer la página de Scott Klement, quien además tiene un excelente tutorial en línea y en PDF accesible tanto para expertos como a neófitos en la materia. La Página es: www.scottklement.com


Bibliografía en la web:




Autor: Ing. Liliana Suárez.


Si te pareció interesante el artículo reenvíalo a un amigo, haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.