Protocolo TCP

Se trata de un conjunto de comandos que nos permiten programar Protocolos TCP/IP como administrar los servicios TCP/IP que programemos.

Las funciones que lo componen pueden agruparse en comandos de protocolos y comandos de gestión de protocolos.

Los comandos de protocolos son comandos que usaremos para programar los intercomunicadores (sub objetos) de un objeto protocolo TCP/IP y son:

Protocolo TCP: enviar buffer

Protocolo TCP: enviar fichero Protocolo

TCP: enviar línea Protocolo

TCP: enviar byte

Protocolo TCP: enviar entero 16 bits

Protocolo TCP: enviar entero 32 bits

Protocolo TCP: enviar entero 64 bits

Protocolo TCP: recibir fichero Protocolo

TCP: recibir hasta carácter de marca

Protocolo TCP: recibir línea

Protocolo TCP: recibir byte

Protocolo TCP: recibir entero 16 bits

Protocolo TCP: recibir entero 32 bits

Protocolo TCP: recibir entero 64 bits

Estos comandos solamente pueden ser usados en los intercomunicadores de un objeto Protocolo TCP/IP.

Los comandos de gestión de protocolos son comandos que nos permiten gestionar los protocolos TCP y que podrán ser usados en cualquier procesos o función, pero no en los intercomunicadores de un objeto Protocolo TCP/IP. Son:

Protocolo TCP: ¿Está iniciado el servicio?

Protocolo TCP: ejecutar función cliente

Protocolo TCP: iniciar servicio

Protocolo TCP: terminar servicio

Protocolo TCP: terminar todos los servicios

Protocolo TCP: ¿Está iniciado el servicio?

Comando de instrucción del grupo Protocolo TCP que comprueba si está iniciado el servicio del protocolo TCP/IP especificado en sus parámetros.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador del protocolo TCP/IP

Objeto protocolo TCP/IP declarado en el proyecto actual o en un proyecto heredado cuyo servicio se desea saber si está iniciado o no.

Identificador de variable local booleana de retorno de Ok

Variable local.

Identificador de variable local array de puertos (Opcional)

Variable de array local del proceso de tipo numérico o alfabético donde se retornará el puerto o puertos donde el servicio haya sido iniciado.

Funcionalidad

Comprueba si está iniciado el servicio del protocolo TCP/IP declarado en sus parámetros en la máquina donde el proceso sea ejecutado, pudiendo conocer además, el puerto o los puertos en el que se encuentra iniciado.

Ejemplo

Comprobamos si está iniciado el servicio ENV_REC_FICHERO

Protocolo TCP: ¿Esta iniciado el servicio? ( ENV_REC_FICHERO@ejemplo, OK_INICIADO, PUERTO )
If ( OK_INICIADO )
    Mensaje ( "El servicio está a la escucha en el puerto " + PUERTO[0], Información, ,  )
Else
    Mensaje ( "El servicio no está iniciado", Información, ,  )

Protocolo TCP: ejecutar función cliente

Comando de instrucción de proceso que ejecuta el sub-objeto cliente definido en un objetoProtocolo TCP/IP creado en el proyecto actual o en un proyecto heredado.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador del protocolo TCP

En este parámetro se seleccionará un objeto protocolo TCP/IP declarado en el proyecto o en un proyecto heredado, cuya función cliente desea ejecutarse.

Fórmula de dominio o IP del servidor

Expresión de tipo fórmula con el nombre de dominio o dirección IP del servidor con el que queremos establecer la conexión TCP/IP. Puede ser un dato constante o variable. Para facilitar su introducción podemos hacer uso del asistente para edición de fórmulas.

Si queremos hacer uso de un número de puerto distinto al configurado en el objeto protocolo TCP/IP, incluiremos el nuevo número de puerto en este parámetro, precedido por dos puntos (:). Ejemplo:

“midominio.com” (hará uso del puerto establecido en las propiedades del objeto protocolo TCP). “midominio.com:5001” (hará uso del puerto 5001, independientemente del número de puerto que tengamos configurado en el objeto protocolo TCP/IP).

Para que sea funcional el cambio de puerto, es necesario que el objeto protocolo TCP/IP tenga configurado un puerto por defecto. Si no, aunque especifiquemos un puerto en este parámetro, no hará uso de él.

Fórmula de los parámetros (opcional)

Si hemos definido parámetros en el sub-objeto función.

Identificador de variable local booleana de retorno de ok (opcional): en este parámetro podremos declarar una variable local.

Funcionalidad

Este comando ejecuta el sub-objeto función. Es decir, ejecuta la parte cliente de un protocolo TCP/IP declarado en el proyecto.

Ejemplo

Ejecutamos la función cliente del protocolo ENV_RC_FICHERO para el envío del fichero seleccionado.

Ventana de selección de fichero ( FICHERO, OK_ACEPTADO, "*.*", "" )
If ( OK_ACEPTADO )
    Protocolo TCP: ejecutar función cliente ( ENV_REC_FICHERO@ejemplo, $ENV_REC_FICHERO_IP@ejemplo, FICHERO, OK_CONNECT )
    If ( !OK_CONNECT )
        Mensaje ( "Conexión fallida", Información, ,  )

Protocolo TCP: enviar buffer

Comando de instrucción del grupo Protocolo TCP envía un buffer de datos.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de dato

Expresión de tipo fórmula con el buffer a enviar. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Fórmula de número de bytes

Expresión de tipo fórmula con el número de bytes del buffer a enviar. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Fórmula de tiempo en espera en segundos

Expresión de tipo fórmula con el tiempo, en segundos, que se va a esperar para enviar el buffer. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Funcionalidad

En un proceso de cliente o de servidor de un protocolo TCP/IP este comando de instrucción envía un buffer de datos. Este comando de instrucción solamente puede ser usado en los procesos (intercomunicadores) de un objeto Protocolo TCP/IP.

Comentarios

El comando de instrucción de proceso que permite recibir el buffer enviado es Protocolo TCP: recibir buffer.

Ejemplo

Enviar la variable BUFFER esperando 10 segundos para obtener respuesta.

Rem ( Se envía el buffer )
Protocolo TCP: enviar buffer ( BUFFER, NUM_BYTES, 10 )

Protocolo TCP: enviar byte

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite enviar un byte de datos.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula valor del byte (0-255)

Expresión fórmula donde se especificará el valor numérico del byte a enviar, que será uno comprendido entre 0 y 255. Para facilitar su especificación podremos hacer uso del asistente para la edición de fórmulas.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se va a estar a la escucha para enviar el byte.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite enviar un byte de datos.

Comentarios

Para obtener el valor numérico del byte a enviar podemos utilizar la función de fórmulas stringToNumber.

El comando de instrucción que permite leer un byte es Protocolo TCP: recibir byte.

Ejemplo

Enviamos el carácter recibido en la variable CADENA como parámetro en el intercomunicador cliente al servidor.

Rem ( Proceso de cliente )
Rem ( Se obtiene el código ASCII del carácter recibido )
Set ( BYTE, stringToNumber(getAsciiCharCode(left(CADENA, 1), "ISO-8859-1")) )
Libre
Rem ( El número obtenido es enviado al servidor )
Protocolo TCP: enviar byte ( BYTE, 10 )

Protocolo TCP: enviar entero 16 bits

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite enviar un entero de 16 bits.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de valor del entero 16 bits (0-65535)

Expresión fórmula donde se especificará el entero de 16 bits a enviar, que deberá ser un número comprendido entre 0 y 65535.

Orden de bytes

Permite especificar el tipo de ordenación de los bytes a enviar, que podrá ser o Little Endian o Big Endian.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se esperará para enviar el entero de 16 bits.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite enviar un entero de 16 bits.

Comentarios

Al tratarse de un entero de 16 bits deberá ser uno comprendido entre 0 y 65535.

Dependiendo del sistema operativo en que se trabaje, hay que considerar el orden de los bytes en los tipos de datos numéricos que utilizan varios bytes. Los dos formatos existentes son Little Endian y Big Endian.

Little Endian significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.

Los procesadores Intel (usados en la mayoría de los ordenadores personales) y los DEC Alpha RISC son Little Endian.

En el formato Big Endian el byte de mayor peso se almacena en la dirección más baja de memoria y el byte de menor peso en la dirección más alta.

La mayoría de los sistemas UNIX, el protocolo de Internet TCP, los procesadores Motorola 680×0 (y, por lo tanto, los Macintosh), Hewlett-Packard PA-RISC, y Sun SuperSPARC son “Big Endian”. El MIPS de Silicon Graphics y el procesador IBM/Motorola PowerPC son capaces de entender ambos sistemas, por lo que se dice que son “Big Endian”.

El comando de instrucción que permite recibir un entero de 16 bits es Protocolo TCP: recibir entero 16 bits.

Ejemplo

Enviamos el entero de 16 bits recibido en la variable ENTERO como parámetro en el intercomunicador cliente al servidor, usando el orden de bytes LitteEndian con un tiempo de espera de 10 segundos.

Rem ( Proceso de cliente )
Protocolo TCP: enviar entero 16 bits ( ENTERO, LittleEndian, 10 )

Protocolo TCP: enviar entero 32 bits

Comando de instrucción del grupo Protocolo TCP permite enviar un entero de 32 bits.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de valor del entero 32 bits (0-4294967295)

Expresión fórmula donde se especificará el entero de 32 bits a enviar, que deberá ser un número comprendido entre 0 y 4294967295.

Orden de bytes

Permite especificar el tipo de ordenación de los bytes a enviar, que podrá ser o Little Endian o Big Endian.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se esperará para enviar el entero de 32 bits.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite enviar un entero de 32 bits.

Comentarios

Al tratarse de un entero de 32 bits deberá ser uno comprendido entre 0 y 4294967295.

Dependiendo del sistema operativo en que se trabaje, hay que considerar el orden de los bytes en los tipos de datos numéricos que utilizan varios bytes. Los dos formatos existentes son Little Endian y Big Endian.

Little Endian significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.

Los procesadores Intel (usados en la mayoría de los ordenadores personales) y los DEC Alpha RISC son Little Endian.

En el formato Big Endian el byte de mayor peso se almacena en la dirección más baja de memoria y el byte de menor peso en la dirección más alta.

La mayoría de los sistemas UNIX, el protocolo de Internet TCP, los procesadores Motorola 680×0 (y, por lo tanto, los Macintosh), Hewlett-Packard PA-RISC, y Sun SuperSPARC son “Big Endian”. El MIPS de Silicon Graphics y el procesador IBM/Motorola PowerPC son capaces de entender ambos sistemas, por lo que se dice que son “bi-endian”.

El comando de instrucción que permite recibir un entero de 32 bits es Protocolo TCP: recibir entero 32 bits.

Ejemplo

Enviamos el entero de 32 bits recibido en la variable ENTERO como parámetro en el intercomunicador cliente al servidor, usando el orden de bytes BigEndian con un tiempo de espera de 10 segundos.

Rem ( Proceso de cliente )
Protocolo TCP: enviar entero 32 bits ( ENTERO, BigEndian, 10 )

Protocolo TCP: enviar entero 64 bits

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite enviar un entero de 64 bits.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de valor del entero 64 bits (0-18446744073709551616)

Expresión fórmula donde se especificará el entero de 32 bits a enviar, que deberá ser un número comprendido entre 0 y 18446744073709551616.

Orden de bytes

Permite especificar el tipo de ordenación de los bytes a enviar, que podrá ser o Little Endian o Big Endian.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se esperará para enviar el entero de 64 bits.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite enviar un entero de 64 bits.

Comentarios

Al tratarse de un entero de 64 bits deberá ser uno comprendido entre 0 y 18446744073709551616.

Dependiendo del sistema operativo en que se trabaje, hay que considerar el orden de los bytes en los tipos de datos numéricos que utilizan varios bytes. Los dos formatos existentes son Little Endian y Big Endian.

Little Endian significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.

Los procesadores Intel (usados en la mayoría de los ordenadores personales) y los DEC Alpha RISC son Little Endian.

En el formato Big Endian el byte de mayor peso se almacena en la dirección más baja de memoria y el byte de menor peso en la dirección más alta.

La mayoría de los sistemas UNIX, el protocolo de Internet TCP, los procesadores Motorola 680×0 (y, por lo tanto, los Macintosh), Hewlett-Packard PA-RISC, y Sun SuperSPARC son “Big Endian”. El MIPS de Silicon Graphics y el procesador IBM/Motorola PowerPC son capaces de entender ambos sistemas, por lo que se dice que son “bi-endian”.

El comando de instrucción que permite recibir un entero de 64 bits es TCP: recibir entero 64 bits.

Ejemplo

Enviamos el entero de 64 bits recibido en la variable ENTERO como parámetro en el intercomunicador cliente al servidor, usando el orden de bytes BigEndian con un tiempo de espera de 10 segundos.

Rem ( Proceso de cliente )
Protocolo TCP: enviar entero 64 bits ( ENTERO, BigEndian, 10 )

Protocolo TCP: enviar fichero

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP envía un fichero.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de senda

Expresión de tipo fórmula con la senda del fichero a enviar. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Fórmula de tiempo en espera en segundos

Expresión de tipo fórmula con el tiempo, en segundos, que se va a esperar para enviar el fichero. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Funcionalidad

En un proceso de cliente o de servidor de un protocolo TCP/IP este comando de instrucción permite enviar un fichero. Solamente puede ser usado en un proceso (intercomunicador) de un objeto Protocolo TCP/IP.

Comentarios

Se trata un comando propio de Velneo y no de un comando estándar TCP, por lo que solamente podrá ser usado para el intercambio de ficheros entre aplicaciones de Velneo.

El comando de instrucción de proceso que permite recibir el fichero enviado es Protocolo TCP: recibir fichero.

El protocolo TCP/IP para enviar y recibir fichero se compone de la siguiente forma:

Buffer con tamaño del fichero en 8 bytes unsigned (64 bits). Big Indian (importante: tipo Unix, no Windows).

Buffer con fichero.

Ejemplo

Enviamos el fichero recibido en la variable FICHERO como parámetro en el intercomunicador cliente al servidor, enviando previamente el nombre del fichero y la longitud en BYTES del mismo.

Rem ( Proceso de cliente )
Rem ( Obtenemos el tamaño del fichero a enviar )
Get atributos del fichero ( FICHERO, FECHA, HORA, BYTES )
Libre
Rem ( Se envía al servidor una línea con el nombre del fichero, un carácter de marca y su longitud )
Protocolo TCP: enviar línea ( getPathFileName(FICHERO) + "|" + BYTES, 10 )
Libre
Rem ( Enviamos el fichero al servidor )
Protocolo TCP: enviar fichero ( FICHERO, 10 )

Protocolo TCP: enviar línea

Comando de instrucción del grupo Protocolo TCP.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de dato

Expresión de tipo fórmula con los bytes de datos a enviar. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Fórmula de tiempo en espera en segundos

Expresión de tipo fórmula con el tiempo, en segundos, que se va a esperar para enviar la línea. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Funcionalidad

En un proceso de cliente o de servidor de un protocolo TCP/IP este comando de instrucción permite enviar una línea de datos. Este comando de instrucción solamente podrá ser usado en procesos intercomunicadores de un objeto Protocolo TCP/IP.

Comentarios

El carácter de fin de línea será añadido (\n) automáticamente por la función al final de la cadena enviada.

El comando de instrucción de proceso que permite recibir la línea enviada es Protocolo TCP: recibir línea.

Ejemplo

Enviamos la línea recibida en la variable LINEA como parámetro en el intercomunicador cliente al servidor, usando con un tiempo de espera de 10 segundos.

Rem ( Proceso de cliente )
Protocolo TCP: enviar línea ( LINEA, 10 )

Protocolo TCP: iniciar servicio

Comando de instrucción de proceso que inicia un servicio TCP.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador del protocolo TCP/IP

En este parámetro tendremos que seleccionar un objeto Protocolo TCP/IP cuyo servicio queremos iniciar.

Identificador de la variable local booleana de retorno de ok (Opcional)

Variable local.

Funcionalidad

Este comando de instrucción de proceso permite iniciar un servicio TCP.

Comentarios

El objeto protocolo TCP/IP tendrá que tener programado el proceso de servidor en el sub objeto Intercomunicador.

Cuando la máquina donde se haya iniciado el servicio reciba una petición un cliente TCP, se ejecutará automáticamente el proceso programado en el intercomunicador de servidor.

El servicio será iniciado en la máquina donde sea ejecutado el proceso. Es decir, si iniciamos el servicio en un proceso ejecutado en primer o 2º plano desde una sesión de Velneo vClient, el servicio será iniciado en esa estación cliente. Si el proceso lo ejecutamos en tercer plano, entonces el servicio será ejecutado en el servidor. Esto tendremos que tenerlo en cuenta a la hora de ejecutar el proceso que termine el servicio.

Recordar que el puerto de escucha para ese servicio se define en el propio objeto Protocolo TCP/IP.

El servicio permanecerá activo hasta que, o bien se dispare un proceso que ejecute el comando de instrucción Protocolo TCP: terminar servicio.

El arranque de objetos protocolo en 2º y 3º plano es asíncrono, ya que es el hilo principal el que arranca el servicio.

Por tanto, este comando de instrucción de proceso devolverá siempre 1, aunque no pueda arrancar el servicio, debido a que el puerto esté ocupado o no se encuentre en el rango permitido.

Ejemplo

Comprobamos en una función el estado actual de un servicio y, en caso de que no se encuentre activo lo iniciamos retornando en la variable OK_INICIADO el valor del estado.

Rem ( Si el servicio ya se encuentra iniciado no haremos nada, si no lo está lo iniciaremos )
Protocolo TCP: ¿Esta iniciado el servicio? ( ENV_REC_LINEA@ejemplo, OK_INICIADO,  )
If ( !OK_INICIADO )
    Protocolo TCP: iniciar servicio ( ENV_REC_LINEA@ejemplo, OK_INICIADO )
Libre
Rem ( Retornamos el estado del servicio tcp )
Set dato de retorno ( OK_INICIADO )

Protocolo TCP: recibir buffer

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un buffer de datos.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador de la variable local alfabética de retorno

Variable local del objeto, de tipo alfabético, en la que se retornará el buffer recibido.

Fórmula de número de bytes

Expresión de tipo fórmula con el tamaño en bytes del buffer a recibir. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Fórmula de tiempo en espera en segundos

Expresión de tipo fórmula con el tiempo, en segundos, que se va a esperar para recibir el buffer. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Funcionalidad

En un proceso de un intercomunicador de un objeto Protocolo TCP/IP este comando de instrucción permite recibir un buffer de datos. Solamente podrá ser usado en un proceso (intercomunicador) de cliente o de servidor de un objeto Protocolo TCP/IP.

Comentarios

Dado que este comando de instrucción requiere conocer el número de bytes a recibir, en el intercomunicador se debería haber recibido antes información sobre el tamaño del buffer a recibir. Es decir, la secuencia del protocolo debería ser:

(Cliente) – Envío de información sobre nº de bytes (Servidor) – Recepción de información sobre nº de bytes (Cliente) – Envío de buffer (Servidor) – Recepción de buffer

El comando de instrucción de proceso que permite enviar el buffer es Protocolo TCP: enviar buffer.

Ejemplo

En el proceso servidor del intercomunicador recibimos el tamaño y buffer que recibirá el servidor. Posteriormente se da de alta un registro en la tabla de mensajes dando valores a los campos especificados en el ejemplo.

Rem ( Proceso de servidor )
Rem ( Recibimos la información sobre el tamaño del buffer )
Protocolo TCP: recibir línea ( TAMAÑO, 10 )
Rem ( Recibimos el buffer )
Protocolo TCP: recibir buffer ( BUFFER, TAMAÑO, 10 )
Crear nueva ficha en memoria ( mensaje, MENSAJES@ejemplo )
    Modificar campo ( NAME, "Buffer recibido: " + BUFFER + ". Tamaño = " + TAMAÑO )
Alta de ficha ( mensaje )
    Libre

Protocolo TCP: recibir byte

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un byte de datos.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador de variable local numérica de retorno

Variable local del objeto de tipo numérico donde se retornará el byte recibido.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se va a estar a la escucha para recibir el byte.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un byte de datos.

Comentarios

El byte recibido será un número comprendido entre 0 y 255. Si deseamos obtener el carácter ASCII correspondiente a ese byte podremos usar la función de fórmulas getAsciiChar.

El comando de instrucción que envía un byte es Protocolo TCP: enviar byte.

Ejemplo

En el proceso servidor del intercomunicador recibimos un byte con un tiempo de espera de 5 segundos. Posteriormente se da de alta un registro en la tabla de mensajes dando valores a los campos especificados en el ejemplo agregando la ficha a una cesta usada para mostrar los mensajes de la tabla MENSAJES.

Rem ( Proceso de servidor )
Rem ( Se recibe el byte enviado por el cliente )
Protocolo TCP: recibir byte ( BYTE, 5 )
Rem ( Se genera el registro en la tabla de mensajes )
Crear nueva ficha en memoria ( mensaje, MENSAJES@ejemplo )
    Modificar campo ( NAME, "Byte recibido: " + getAsciiChar(BYTE, "ISO-8859-1") )
Alta de ficha ( mensaje )
    Cesta: agregar ficha a la cesta ( MENSAJES@Tutor TCP )
Rem ( Invertir el orden de la cesta para que el último mensaje sea el primer registro )
Cesta: procesar ( MENSAJES@Tutor TCP )
    Invertir lista

Protocolo TCP: recibir entero 16 bits

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un entero de 16 bits.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador de la variable local numérica de retorno

Variable local del objeto, de tipo numérico, donde se retornará el entero de 16 bits recibido.

Orden de bytes

Permite especificar el tipo de ordenación de los bytes a recibir, que podrá ser o Little Endian o Big Endian.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se va a estar a la escucha para recibir el entero de 16 bits.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un entero de 16 bits.

Comentarios

Al tratarse de un entero de 16 bits deberá ser uno comprendido entre 0 y 65535.

Dependiendo del sistema operativo en que se trabaje, hay que considerar el orden de los bytes en los tipos de datos numéricos que utilizan varios bytes. Los dos formatos existentes son Little Endian y Big Endian.

Little Endian significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.

Los procesadores Intel (usados en la mayoría de los ordenadores personales) y los DEC Alpha RISC son Little Endian.

En el formato Big Endian el byte de mayor peso se almacena en la dirección más baja de memoria y el byte de menor peso en la dirección más alta.

La mayoría de los sistemas UNIX, el protocolo de Internet TCP, los procesadores Motorola 680×0 (y, por lo tanto, los Macintosh), Hewlett-Packard PA-RISC, y Sun SuperSPARC son “Big Endian”. El MIPS de Silicon Graphics y el procesador IBM/Motorola PowerPC son capaces de entender ambos sistemas, por lo que se dice que son “bi-endian”.

El comando de instrucción que permite enviar un entero de 16 bits es Protocolo TCP: enviar entero 16 bits.

Ejemplo

Recibimos un entero de 16 bits en la variable ENTERO como parámetro en el intercomunicador servidor, usando el orden de bytes LitteEndian con un tiempo de espera de 10 segundos.

Rem ( Proceso de servidor )
Rem ( Recepción del dato enviado por el cliente )
Protocolo TCP: recibir entero 16 bits ( ENTERO, LittleEndian, 10 )

Protocolo TCP: recibir entero 32 bits

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un entero de 32 bits.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador de la variable local numérica de retorno

Variable local del objeto, de tipo numérico, donde se retornará el entero de 32 bits recibido.

Orden de bytes

Permite especificar el tipo de ordenación de los bytes a recibir, que podrá ser o Little Endian o Big Endian.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se va a estar a la escucha para recibir el entero de 32 bits.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un entero de 32 bits.

Comentarios

Al tratarse de un entero de 16 bits deberá ser uno comprendido entre 0 y 4294967295.

Dependiendo del sistema operativo en que se trabaje, hay que considerar el orden de los bytes en los tipos de datos numéricos que utilizan varios bytes. Los dos formatos existentes son Little Endian y Big Endian.

Little Endian significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.

Los procesadores Intel (usados en la mayoría de los ordenadores personales) y los DEC Alpha RISC son Little Endian.

En el formato Big Endian el byte de mayor peso se almacena en la dirección más baja de memoria y el byte de menor peso en la dirección más alta.

La mayoría de los sistemas UNIX, el protocolo de Internet TCP, los procesadores Motorola 680×0 (y, por lo tanto, los Macintosh), Hewlett-Packard PA-RISC, y Sun SuperSPARC son “Big Endian”. El MIPS de Silicon Graphics y el procesador IBM/Motorola PowerPC son capaces de entender ambos sistemas, por lo que se dice que son “bi-endian”.

El comando de instrucción que permite enviar un entero de 32 bits es Protocolo TCP: enviar entero 32 bits.

Ejemplo

Recibimos un entero de 32 bits en la variable ENTERO como parámetro en el intercomunicador servidor, usando el orden de bytes BigEndian con un tiempo de espera de 10 segundos.

Rem ( Proceso de servidor )
Rem ( Recepción del dato enviado por el cliente )
Protocolo TCP: recibir entero 32 bits ( ENTERO, BigEndian, 10 )

Protocolo TCP: recibir entero 64 bits

Comando de instrucción del grupo Protocolo TCP permite recibir un entero de 64 bits.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador de la variable local numérica de retorno

Variable local del objeto, de tipo numérico, donde se retornará el entero de 64 bits recibido.

Orden de bytes

Permite especificar el tipo de ordenación de los bytes a recibir, que podrá ser o Little Endian o Big Endian.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se va a estar a la escucha para recibir el entero de 64 bits.

Funcionalidad

Comando de instrucción que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir un entero de 64 bits.

Comentarios

Al tratarse de un entero de 16 bits deberá ser uno comprendido entre 0 y 18446744073709551616.

Dependiendo del sistema operativo en que se trabaje, hay que considerar el orden de los bytes en los tipos de datos numéricos que utilizan varios bytes. Los dos formatos existentes son Little Endian y Big Endian.

Little Endian significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.

Los procesadores Intel (usados en la mayoría de los ordenadores personales) y los DEC Alpha RISC son Little Endian.

En el formato Big Endian el byte de mayor peso se almacena en la dirección más baja de memoria y el byte de menor peso en la dirección más alta.

La mayoría de los sistemas UNIX, el protocolo de Internet TCP, los procesadores Motorola 680×0 (y, por lo tanto, los Macintosh), Hewlett-Packard PA-RISC, y Sun SuperSPARC son “Big Endian”. El MIPS de Silicon Graphics y el procesador IBM/Motorola PowerPC son capaces de entender ambos sistemas, por lo que se dice que son “bi-endian”.

El comando de instrucción que permite enviar un entero de 64 bits es Protocolo TCP: enviar entero 64 bits.

Ejemplo

Recibimos un entero de 64 bits en la variable ENTERO como parámetro en el intercomunicador servidor, usando el orden de bytes BigEndian con un tiempo de espera de 10 segundos.

Rem ( Proceso de servidor )
Rem ( Recepción del dato enviado por el cliente )
Protocolo TCP: recibir entero 64 bits ( ENTERO, BigEndian, 10 )

Protocolo TCP: recibir fichero

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP recibe un fichero.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Fórmula de senda

Expresión de tipo fórmula con la senda completa (senda, nombre y extensión) del fichero a guardar. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Fórmula de tiempo en espera en segundos

Expresión de tipo fórmula con el tiempo, en segundos, que se va a esperar para recibir el fichero. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Funcionalidad

En un proceso de cliente o de servidor de un de un protocolo TCP/IP este comando de instrucción recibe un fichero de otro servidor o cliente TCP. Solamente puede ser usado en procesos (intercomunicadores) de un objeto objeto protocolo TCP/IP.

Comentarios

Antes de recibir el fichero es necesario conocer tanto el nombre del fichero a recibir como su tamaño en bytes, por tanto, en el protocolo se debería obtener ambos datos antes de la recepción del fichero. La secuencia, por ejemplo, podría ser:

Cliente

Servidor

Envío de nombre y extensión del fichero.

Recepción de nombre y extensión del fichero.

Envío del tamaño en bytes del fichero.

Recepción del tamaño en bytes del fichero.

Envío del fichero.

Recepción del fichero.

El comando de instrucción de proceso que permite enviar un fichero es Protocolo TCP: enviar fichero.

Se trata un comando propio de Velneo y no de un comando estándar TCP, pero si se quiere enviar a un servicio TCP de Velneo Vt ficheros desde otras plataformas, debemos tener en cuenta que Velneo espera el tamaño del fichero en formato big indian y 64 bits seguido del fichero en binario. A continuación ponemos un ejemplo para hacerlo desde Python y un enlace de cómo hacerlo desde PHP:

`#!/usr/bin/python

-- coding: UTF-8 --`

`import socket import sys from struct import *

Connect to the host

s.connect( ( host, port ) )

Fichero leído en modo binario

sendfile = open(‘logo.png’, ‘rb’)

Leemos el fichero

data = sendfile.read()

Convertimos el tamaño del fichero a hex con ordenación de bytes tipo Big Indian y 64 bits

En php se puede hacer como se indica aquí: http://www.php.net/manual/en/function.pack.php

En los comentarios de esa página se indica como hacerlo para 64 bits (en dos trozos de 32)

a=pack(“>Q”, 44797)

Enviamos el tamaño seguido del fichero

s.sendall(a+data) s.close()`

Ejemplo

Guardamos un fichero enviado por el intercomunicador cliente conociendo previamente el nombre del fichero que va a recibir el servidor. Recibimos el tamaño del fichero y posteriormente recibimos el fichero.

Rem ( Proceso de servidor )
Rem ( De la línea enviada por el cliente leemos hasta el carácter de marca, para extraer el nombre del fichero )
Protocolo TCP: recibir hasta carácter marca ( FICHERO, "|", 10 )
Rem ( Quitamos el carácter de marca al nombre del fichero )
Set ( FICHERO, left(FICHERO, len(FICHERO)-1) )
Rem ( Recepción del tamaño del fichero (dato que va a continuación del carácter de marca) )
Protocolo TCP: recibir línea ( TAMAÑO, 10 )
Rem ( Recibir el fichero )
Protocolo TCP: recibir fichero ( tempPath() + "/" + FICHERO, 60 )

Protocolo TCP: recibir hasta carácter marca

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP recibe bytes de datos hasta una marca determinada.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador de la variable local alfabética de retorno

En este parámetro especificaremos la variable local donde se retornarán los bytes recibidos.

Fórmula de carácter marca

Expresión fórmula donde se especificará cuál es el carácter de marca. Para facilitar su especificación podremos hacer uso del asistente para la creación de fórmulas. En este parámetro se podrá especificar más de un carácter. El carácter o los caracteres definidos en el mismo serán excluidos de la trama recibida.

Fórmula de tiempo de espera en segundos

Expresión fórmula donde se especificará el tiempo, en segundos, que se va a estar a la escucha para recibir los datos.

Funcionalidad

Este comando permite, en un proceso de un intercomunicador de un objeto Protocolo TCP/IP recibir bytes de datos hasta una marca determinada.

Ejemplo

Recibimos en el lado del servidor caracteres hasta llegar a un carácter que nos marca el final de la recepción.

Rem ( Proceso de servidor )
Rem ( De la línea enviada por el cliente leemos hasta el carácter de marca, para extraer la cadena )
Protocolo TCP: recibir hasta carácter marca ( TEXTO, "|", 10 )
Rem ( Quitamos el carácter de marca al texto )
Set ( TEXTO, left(TEXTO, len(TEXTO)-1) )

Protocolo TCP: recibir línea

Comando de instrucción de proceso que en un proceso intercomunicador de un objeto Protocolo TCP/IP permite recibir bytes de datos seguidos de un carácter de fin de línea (\n).

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador de la variable local alfabética de retorno

Variable local del objeto donde se retornarán los bytes de datos recibidos.

Fórmula de tiempo en espera en segundos

Expresión de tipo fórmula con el tiempo, en segundos, que se va a esperar para recibir la línea. Para su especificación podremos hacer uso del asistente para edición de fórmulas.

Funcionalidad

En un proceso de cliente o de servidor de un protocolo TCP/IP este comando de instrucción permite recibir una línea de datos (conjunto de bytes seguido de un carácter \n) . Este comando de instrucción solamente podrá ser usado en procesos (intercomunicadores) de un objeto Protocolo TCP/IP.

Comentarios

El comando de instrucción de proceso que envía una línea es Protocolo TCP: enviar línea.

Ejemplo

Recibimos en el lado del servidor una línea de caracteres en la variable local LINEA dándola de alta en la tabla de mensajes.

Rem ( Proceso de servidor )
Protocolo TCP: recibir línea ( LINEA, 10 )
Crear nueva ficha en memoria ( mensaje, MENSAJES@ejemplo )
    Modificar campo ( NAME, "Línea recibida: " + LINEA )
Alta de ficha ( mensaje )
    Libre

Protocolo TCP: rerminar servicio

Comando de instrucción de proceso que termina un servicio TCP.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

Identificador del protocolo TCP/IP

En este parámetro tendremos que seleccionar un objeto Protocolo TCP/IP cuyo servicio queremos terminar.

Identificador de la variable local booleana de retorno de ok (Opcional)

Variable local al proceso de tipo booleano donde se retornará si el servicio ha podido ser terminado (1) o no (0).

Funcionalidad

Este comando de instrucción de proceso permite terminar un servicio TCP.

Un servicio es iniciado con el comando de instrucción de proceso Protocolo TCP: iniciar servicio.

Ejemplo

Terminamos el servicio especificando en la variable local OK_DETENIDO el resultado.

Protocolo TCP: terminar servicio ( ENV_REC_LINEA@Tutor TCP, OK_DETENIDO )

Protocolo TCP: terminar todos los servicios

Comando de instrucción de proceso que termina todos los servicios TCP iniciados en la máquina donde se ejecute el proceso.

Origen de la instrucción: cualquiera.

Destino del subproceso: ninguno.

Parámetros

No tiene.

Funcionalidad

Este comando de instrucción de proceso detiene todos los servicios TCP iniciados en la sesión en curso de la instancia de aplicación que está siendo ejecutada.

Un servicio es iniciado con el comando de instrucción de proceso Protocolo TCP: iniciar servicio.

Ejemplo

Terminamos todos los servicios que podamos tener activos.

Protocolo TCP: terminar todos los servicios

Última actualización