(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.
1 comment:
Gracias por tu clara explicacion (en castellano) sobre el uso de socket y su logica. Si puedo hacerte na pregunta y te resulta facil responderla te lo agradeceria. Veras, tengo un programa en ILERPG en un iseries para tratar con un dispositivo de cobro por tarjetas en el que utilizo sockets como medio de comunicacion entre el iSeries y el dispositivo, el problema es que cuando ejecuto la funcion recv() en mi sistema en modo de pruebas, recibo las 4096 posiciones que espero como respuesta desde el socket, pero cuando lo instalo en el sistema del cliente solo me devuelve 1423 posiciones, quedando fuera datos como la autorizacion bancaria y otros, la unica diferencia entre una instalacion y otra es que en el cliente existe una netlan entre el iSeries y el PC al que esta conectado el dispositivo. ¿Se te ocurre algo que pueda provocar este efecto? encualquier caso muchas gracias y felicidades por tu pagina.
Post a Comment