Sockets/es

From Free Pascal wiki
Jump to: navigation, search

English (en) español (es) français (fr) slovenčina (sk)

Acerca de

Sockets es un paquete modificado-LGPL para Lazarus. Define el componente TSocketClient para conectar aplicaciones a un servidor genérico de sockets en redes que utilizan TCP/IP.

La descarga contiene los ficheros de componentes de Pascal, el fichero de paquete de Lazarus y ficheros de recursos y además los ficheros de texto de la licencia LGPL-modificada.

Este componente se ha diseñado para aplicaciones que se ejecuten en plataformas Linux y Win32.

Autor

Antonio d'Avino

Licencia

LGPL modificada (leer COPYING.modifiedLGPL y COPYING.LGPL, ambos incluidos en el paquete).

Descarga

Se puede encontrar la última versión estable en Lazarus CCR Files page o en los sites del autor http://infoconsult.homelinux.net.

(Julio 2009: este enlace no parece funcionar).

  • Actualmente también puedes descargar el paquete Sockets desde aquí.

Si alguien desea completar este apartado con información actualizada. Cuando tenga un rato a ver si miro por si este componente ya formase parte de la paleta por defecto.

Interesados por el tema ver tambien:


ARARAT SYNAPSE

INDY (Internet Direct)

INDY en FreePascal/Lazarus

Log de cambios

  • Versión 0.2.0 2005/06/01

Recorrido

  • Implementación del modo asíncrono en operaciones de escritura.
  • Añadiendo al paquete la clase TSocketServer.

Dependencias / Requerimientos del sistema

  • Lazarus 0.9.6 (FPC 1.9.8)

Estado: Beta

Incidencias: Testeado en Windows (Win2K) y Linux (Mdk 10.1).

Instalación

  • En el directorio de componentes de Lazarus descomprimir - untar (unzip)- los ficheros contenidos en sockets-laz-package-<version>.tar.gz. Se creará la carpeta Sockets.
  • Abre lazarus.
  • Abre el paquete sockets_laz.lpk desde la entrada Componente/Abrir fichero de paquete (.lpk)
  • (Click en compilaron solamente si no necesitas instalar los componentes dentro del IDE)
  • Click en Instalar y responde 'Si' cuando pregunte si reconstruir Lazarus rebuilding. Se creará una nueva solapa en la paleta de componentes llamada 'Sockets'.

Nota para usuarios de Win32: En caso de experimentar dificultades a la hora de compilar los ficheros Pascal, puedes necesitar añadir la siguiente trayectoria (path):

<unidad>:<trayecto>\lazarus\lcl\units\i386\win32 (eg: c:\programs\lazarus\lcl\units\i386\win32) to the 'Other unit files ...' en la solapa 'Trayectos' dentro de 'Opciones del Compilador' en la ventana del gestor de paquetes de Lazarus.

Utilización

Arrastra un componente TSocketClient hasta alguna parte del formulario para cualquiera de las distintas conexiones socket que necesita la aplicación.

Las propiedades imprescindibles de este componente que hay que definir obligatoriamente son:


  • Host : la dirección TCP/IP o la URL del PC donde están activos los sockets en modo servidor;
  • Port : el puerto TCP/IP a través del cual el proceso del servidor está escuchando (listening);

Las propiedades opcionales que se pueden establecer son:

  • DosLf : Se establece a 'True', cuando se ejecuta un procedimiento writeLineLf un CR (0x0D) se antepone a LF (0x0A)(ver más adelante).
  • ReadCharsThereshold : el número de caracteres leidos desde el canal antes del lanzamiento de un evento OnReadChars (ver más adelante). 0 es equivalente a 1.

Ahora ya se puede establecer al valor 'True' la propiedad Active para abrir el canal. Se genera una excepción si falla la conexión (host no alcanzable, la no existencia un un proceso escuchando en un puerto del servidor, errores de red...).

La conexión se cierra estableciendo al valor 'False' la propiedad Active. Además, se puede testear la propiedad Active para verificar si el estado de la conexión esta en ON (el cierre de la conexión por parte del servidor establece la propiedad Active en 'False').


Métodos públicos de la clase TSocketClient.

  • function bufferChars : Integer. Retorna el número de caracteres recibidos desde el servidor a través del canal, estando disponible para lectura.
  • function getBuffer (var buffer: String) : Integer. Esta función copia los caracteres del buffer interno del componente en la cadena de parámetro 'buffer'. Retorna el número de caracteres copiados y vacía el buffer.
  • function readLine (var buffer: String) : Boolean. Los caracteres en el buffer interno se copian en la cadena de parámetro 'buffer', upto, pero no incluyéndolo, la ocurrencia del primer carácter LF (0x0A9) chara. Cualquiera otros caracteres CR 0x0D) se descartan.

Si se copia la línea completa, entonces la función retorna true. Si no encuentra algún caracter LF, entonces copia el buffer interno completo en el parámetro 'buffer' y a continuación la función retorna false.

Nota: el contenido pendiente en el buffer interno se encuentra disponible además cuando se cierra la conexión. Solamente se perderá si la conexión de vuelve a abrir.

  • function writeChar (buffer : Char ) : ShortInt. Esta función escribe un único carácter en el canal, retornando 0 en caso satisfactorio o un valor menor que cero (<0) si falla.
  • function writeLine (buffer : String) : ShortInt. Se envía al servidor el contenido del parámetro 'buffer'. La función retorna 0 en caso de tener éxito o un valor menor que 0 (<0) si falla.
  • function writeLineLf (buffer : String) : ShortInt. Igual que la función writeLine, pero se anexa un carácter LF (0x0A) (una pareja de CR/LF, si la propiedad DOSLf es verdadera 'true').

La función retorna 0 en caso de éxito y un valor menor que 0 (<0) si produce fallo.


Nota: hasta el momento, los métodos de escritura de la clase no son asíncronos, por lo que deben ser bloqueados desde la aplicación en caso de fallo. Esto se corregirá en la próxima versión.

Eventos de la clase TSocketClient.

  • OnBufferFull : este evento se lanza cuando el buffer interno está lleno. No se recepcionan más caracteres desde el canal hasta que son leidos desde el buffer interno. Este evento tiene lugar cuando se recibe un carácter LF (0x0A) desde el servidor.
  • OnReadChars : este evento se lanza (triggered) cuando al menos un cierto número de ReadCharsThereshold permanecen pendientes en el buffer interno.
  • OnStateChange : este evento tiene lugar en el momento en que se cambie el valor de la propiedad Active.