Documentación de Velneo
29
29
  • Introducción
  • Velneo
    • Requerimientos de Velneo
    • Notas de la versión
    • Funcionalidades comunes a los componentes de Velneo
      • Instalación
      • Conexión con Velneo vServer
      • Cambiar el estilo de visualización
      • Ver u ocultar barras de herramientas
      • Mensajería interna entre usuarios
      • Soporte de alta resolución (HighDPI)
      • Carpetas de trabajo de los componentes de Velneo
      • Numeración de versiones de Velneo
      • Certificado de firma digital para componentes de Windows
    • Tipos de archivo generados por Velneo
    • Velneo Web
      • Plataformas y navegadores compatibles
      • Acceso a recursos del sistema
      • Siempre https
      • Funcionamiento de vatp por websocket
      • CORS para llamadas xmlhttprequest
  • Velneo vDevelop
    • ¿Qué es Velneo vDevelop?
    • Interfaz de Velneo vDevelop
      • Menú Soluciones
      • Menú Proyectos
      • Menú Objetos
      • Menú Scripts
      • Menú Edición
      • Menú Ver
      • Menú Componentes
      • Menú Ayuda
    • Lista de teclas aceleradoras de Velneo vDevelop
    • Soluciones y proyectos
    • Control y edición de proyectos
    • Herencia
    • Inspectores
    • Proyectos objetos y editores
      • Proyecto de datos
      • Proyecto de aplicación
        • Crear CSS para aplicar a objetos en edición
      • Objeto
      • Objetos de proyecto de datos
        • Indice complejo
        • Tabla
          • Actualización
          • Campo
          • Enlace
          • Indice
          • Plural
          • Traspaso de campo
          • Trigger
        • Tabla estática
        • Variable
      • Objetos de proyecto de aplicación
        • Acción
        • Alternador de lista
        • Arbol visor de tablas
        • Bloc de formularios
        • Casillero
        • Cesta
        • ComboView
        • Control SVG
        • Dispositivo serie
        • Formulario
          • Controles de visualización
            • Texto estático
            • Nombre de campo
            • Visor HTML
            • Dibujo
            • Imagen SVG
            • Caja de grupo
            • Menú arbolado
            • Barra de progreso
            • Reloj
            • Manómetro
            • Termómetro
          • Controles de edición
            • Caja de texto
            • Caja de texto enriquecido
            • Data catcher edit
            • Edición alfabética
            • Edición fecha
            • Edición fecha/hora
            • Edición fórmula
            • Edición hora
            • Edición numérica
            • Edición senda fichero
            • Edición senda directorio
            • Objeto dibujo
          • Controles de entrada
            • Botón
            • Botón de check
            • Botón de radio
            • Calendario
            • ComboBox
            • Deslizador
            • Dial
            • ListBox
            • Rueda
          • Contenedores
            • Área de scroll
            • Caja de formularios
            • Pila de formularios
            • Separador de formularios
            • Splitter
            • Vista de datos
          • Layout
          • Tree widget
          • Controles SVG
          • Extensión de ficha
        • Formulario QML
        • Gráfico
        • Imagen SVG
        • Impresora lógica
        • Informe
          • Editor de informes
          • Agrupamiento
          • Sección
          • Cálculo
        • Informe personalizable
          • Diseñando un informe personalizable básico
          • Diseño avanzado
          • Diseñando un informe personalizable
          • Añadiendo orígenes de datos
          • Añadiendo elementos al informe
          • Características avanzadas
          • Etiquetas
          • Asistente de scripts
          • Impresión de gráficos
          • Opciones html
        • ListView
        • Lista QML
        • Localizador
        • Marco
        • Menú
        • Multivista
        • Protocolo TCP-IP
        • Reemplazo
        • Rejilla
          • Propiedades de columna de rejilla
        • Rejilla avanzada
          • Propiedades de columna de rejilla avanzada
        • Toolbar
        • ViewFlow
        • Sub-objetos de vistas de datos
          • Conexión de evento
          • Drop
          • Inserción
          • Manejador de evento
      • Objetos comunes a proyecto de datos y de aplicación
        • Búsqueda
        • Cola
        • Constante
        • Dibujo
        • Esquema de tablas
        • Fichero adjunto
        • Función
        • Librería externa
        • Lupa
        • Proceso
          • Indice de comandos de instrucción de proceso
          • Comandos de base de datos
            • API
            • Bases de datos externas
            • Búsquedas
            • Campos (grupo de comandos)
            • Cestas
            • Fichas
            • Fichas seleccionadas
            • Listas
            • Tablas
            • Tubos
          • Básicos
            • Controles de flujo
            • Debug
            • Ejecución
            • Salida/retornos
            • Scripts (grupo de comandos)
            • Transacciones (comandos)
            • Variables
          • Comunicación
            • Internet
            • Protocolo TCP
            • Puerto serie
            • SDV
          • Interfaz
            • Acciones (comandos)
            • Control
              • Ejemplo de CSS
            • Diálogos
            • Formularios - comandos
            • Localizadores
            • Objeto - grupo de comandos
            • Ventana principal
            • Vista de datos - comandos
          • Sistema
            • Comandos de Sistema
            • Configuración
            • Directorios
            • Ficheros
        • Tubo de ficha
        • Tubo de lista
        • Variable local
      • Editores
        • Asistente de fórmulas
          • Operadores
          • Funciones estándar
            • Funciones API
            • Funciones básicas
            • Funciones de cadenas
              • Expresiones regulares
            • Funciones científicas
            • Funciones de Cliente-servidor
            • Funciones de color
            • Funciones de códigos
            • Funciones de directorios
            • Funciones de fechas
            • Funciones de ficha en curso
            • Funciones de horas
            • Funciones JSON
            • Funciones de Internet
            • Funciones de juegos de caracteres
              • Codecs
            • Funciones numéricas
            • Funciones de sistema
            • Funciones de tiempo
            • Funciones trigonométricas
          • Funciones de dll
          • Funciones de proceso
          • Funciones de campo
          • Campos
          • Constantes
          • Variables globales
          • Variables locales
          • Variables del sistema
          • Verificador de fórmulas
          • Conversión automática de datos
          • Introducción de datos literales
          • Secuencias de escape en cadenas de caracteres
          • Composición de sendas en fórmulas
          • Operar con datos de tipo fecha, hora y tiempo
        • Editor de imágenes
        • Selector de fuentes
    • Scripts
      • Lenguajes
        • JavaScript
          • Procesos JavaScript
          • Fórmulas JavaScript
          • Clases
            • Funciones globales
            • Objetos
            • VAbstractBrowser
            • VAbstractDataView
            • VAbstractListDataView
            • VAdvandedGridListDataView
            • VAlternatorListDataView
            • VApp
            • VBoundFieldComboBox
            • VBoundFieldEdit
            • VBoundFieldEditBrowser
            • VBoundFieldListBox
            • VByteArray
            • VCheckBox
            • VClipboard
            • VClockWidget
            • VComboBox
            • VComboListDataView
            • VCoverFlowListDataView
            • VCWebView
            • VDataCatcherEdit
            • VDataCatcherEditBrowser
            • VDataView
            • VDataViewDialog
            • VDateEdit
            • VDateEditBrowser
            • VDateTimeEdit
            • VDateTimeEditBrowser
            • VDial
            • VDir
            • VExtension
            • VFile
            • VFileInfo
            • VFilePathEditBrowser
            • VFinder
            • VFont
            • VFormBlockListDataView
            • VFormDataView
            • VFormulaEditBrowser
            • VGaugeWidget
            • VGridListDataView
            • VGroupBox
            • VImage
            • VImageEdit
            • VImageWidget
            • VInstancesList
            • VInstance
            • VInstances
            • VItemRegisterPattern
            • VLabel
            • VLineEdit
            • VLineEditBrowser
            • VListBox
            • VListDataView
            • VLogin
            • VMainWindow
            • VMdiView
            • VMimeData
            • VMultiDataView
            • VNumberSpinBox
            • VNumberSpinBoxBrowser
            • VObjectInfo
            • VObjectInstance
            • VProcess
            • VProgressBar
            • VProjectInfo
            • VPushButton
            • VQmlFormDataView
            • VQmlListDataView
            • VQmlListModel
            • VQuery
            • VRadioButton
            • VRegister
            • VRegisterList
            • VReportListDataView
            • VRequest
            • VResponse
            • VRoot
            • VScreen
            • VScrollArea
            • VServerAdmin
            • VSettings
            • VSlider
            • VSlotListDataView
            • VSolutionInfo
            • VSplitter
            • VSqlDatabase
            • VSSLCertificate
            • VSSLInfo
            • VSSLSessionCipher
            • VStackedWidget
            • VSvgButton
            • VSvgSlideSwitch
            • VSvgToggleSwitch
            • VSvgWidget
            • VSysInfo
            • VTableInfo
            • VTabWidget
            • VTextEdit
            • VTextFIle
            • VThermometerWidget
            • VThumbWheel
            • VTimeEdit
            • VTimeEditBrowser
            • VToolBox
            • VTreeItem
            • VTreeItemRegister
            • VTreeListDataView
            • VTreeMenu
            • VTreeMultiTableListDataView
            • VTreeWidget
            • VUser
            • VUserGroup
            • VUserGroupList
            • VUserList
            • VXmlReader
            • VXmlWriter
            • Widget
            • XMLHttpRequest
        • QML
          • Tipos QML
          • Funciones específicas de QML
    • Depuración
      • Depuración de procesos de Velneo
      • Depuración de procesos JavaScript
      • Monitor de vClient
    • Extensiones de Velneo vDevelop
    • Acceso directo a una solución desde vDevelop
    • Buenas prácticas
      • Buenas prácticas de organización
        • Proyectos
        • Organización de carpetas
        • Proyecto de datos
        • Proyecto de aplicación
      • Buenas prácticas de codificación
        • Identificadores
        • Teclas aceleradoras
        • Documenta
        • Diseña los formularios como si no existiesen los layouts
      • Buenas prácticas de rendimiento
        • Arquitectura
          • Listas de registros
          • Lista de resultados de una búsqueda
          • Las cestas
          • Las variables globales
          • La caché de fichas
          • Programa en cloud
        • Formularios
          • Condiciones de visible y activo
          • Carga de subformularios en pestaña, caja o pila
        • Base de datos
          • Campos
          • Indices
          • Actualizaciones
          • Eventos de tabla o triggers
          • Variables globales y constantes
          • Tablas en memoria vs tablas en disco
          • Optimizar migraciones de datos
          • Búsquedas en el servidor ¿Cuándo y Cómo?
          • Campos fórmula vs campos en disco
          • Indices condicionados vs búsquedas complejas
          • ¿Cuándo usar tablas de extensión?
          • Indices de trozos y palabras
          • ¿Cuándo usar cada tipo de campo alfa?
        • Procesos y funciones y eventos
          • 1º, 2º, 3º y 4º plano ¿Cuándo usar cada uno?
          • Bloqueo blando vs bloqueo duro
          • Pasar información del cliente al servidor
          • ¿Cómo optimizar transacciones grandes?
          • ¿Cómo gestionar las transacciones?
          • Grabaciones optimizadas para el usuario
        • Carga de registros en objetos de lista
          • Rejillas
            • Campos punteros a singular
            • Totales
            • Condiciones de activo, visible y color en columna
            • Campos de tipo objeto
        • Conoce los límites
      • Imágenes
      • Buenas prácticas para el desarrollo en equipo
    • Análisis de bases de datos para aplicaciones de Velneo
      • Un centro de enseñanza
      • Facturas de un cliente
      • Repartos de obras de teatro
      • Galería de arte
      • Gestión de un colegio
      • Instalación de lunas para vehículos
      • Libros y autores
      • Tienda de discos
      • Últimos pedidos de un proveedor
      • Existencias por almacén y precios por cliente
      • Generación de tickets para un quiosco
      • Navegación por facturas
  • Velneo vDevelop Web
  • Velneo vAdmin
    • ¿Qué es Velneo vAdmin?
    • Gestión de usuarios
    • Gestión de aplicaciones
      • Soluciones
      • Instancias
      • Disco
    • Monitorización
      • Lista de comandos
    • Tareas
    • Acceso directo
    • Velneo vAdmin Web
  • Velneo vClient
    • ¿Qué es Velneo vClient?
    • Movilidad
    • Funcionalidades de Velneo vClient
      • Accesos directos y VRL
      • Cambiar idioma
      • Panel de procesos en 2º plano
      • Manejo de rejillas
        • Submenú de filtros
      • Uso de la rejilla avanzada
      • Manejo de cestas
      • Refrescos
      • Caché local
      • Edición de campos enlazados a maestro
      • Edición de campos de tipo fecha
      • Capturar imagen desde una cámara
      • Asignar impresoras lógicas
      • Actualización automática
      • Personalización de la ventana de conexión de Velneo vClient
      • Instalador personalizado de Velneo vClient
      • Ordenación de listas
  • Velneo vServer
    • ¿Qué es Velneo vServer?
    • Instalación y configuración
      • Activación de la licencia
      • Línea de comandos de Velneo vServer
      • Parámetros configurables de Velneo vServer
      • Estructura de directorios
    • Iniciar y detener Velneo vServer
    • Funcionalidades
      • Protocolo VATP
      • Protocolo VATPS
      • Multi-hilo
      • Integridad referencial
      • Refrescos terciarios
      • Sistema transaccional
      • Sistema de bloqueos
      • Tecnología bigkey
      • Hilo de control
    • Mensajes de log de sistema
    • vPacker
  • Velneo vInstallBuilder
    • ¿Qué es Velneo vInstallBuilder?
    • Configurar una instalación
    • Probar una instalación
    • Crear el instalable
    • Accesos directos
  • Velneo vModApache
    • ¿Qué es Velneo vModApache?
    • Instalación y configuración
    • Nomenclatura de objetos en urls
    • Uso de ficheros adjuntos
    • Caché local de Velneo vModApache
  • Velneo vDataClient
    • ¿Qué es Velneo vDataClient?
    • Iniciar Velneo vDataClient
    • Interfaz de Velneo vDataClient
    • Procesos
    • Utilidades
    • Acceso directo a una instancia de datos
  • Velneo vTranslator
    • ¿Qué es Velneo vTranslator?
    • Importación y exportación basada en XLIFF
    • Acceso directo a una solución
  • Velneo ODBC Driver
    • ¿Qué es velneo ODBC Driver?
    • Referencia de comandos SQL
  • Velneo vVersion
    • ¿Qué es Velneo vVersion?
  • Velneo vERP
    • ¿Qué es Velneo vERP?
    • Manual del programador
    • Documentación de la ApiRest
    • Novedades de la versión
  • Velneo vTutor
    • ¿Qué es vTutor?
    • Tutores de objetos básicos
      • Tutor de árboles visores de tablas arboladas
      • Tutor de búsquedas
      • Tutor de cestas
      • Tutor de formularios
      • Tutor de informes
      • Tutor de localizador básico
      • Tutor de marcos
      • Tutor de rejillas
      • Tutor de rejillas avanzadas
    • Tutores de objetos avanzados
      • Tutor de alternadores de lista
      • Tutor de comboview
      • Tutor de drag and drop
      • Tutor de eventos
      • Tutor de tablas de extensión y extensiones de ficha
      • Tutor de grabación de fichas
      • Tutor de gráficos
      • Tutor de impresión de informes
      • Tutor de lupas
      • Tutor de protocolo TCP/IP
      • Tutor de reemplazo
    • Tutores de controles
      • Tutor de botones de menú
      • Tutor de controles SVG
      • Tutor de edición numérica
      • Tutor de visor html dinámico
      • Tutor de vistas de datos de lista
    • Tutores de procesos y manejadores de evento avanzados
      • Tutor de cambio de marco
      • Tutor de comandos de interfaz y acciones
      • Tutor de importación y exportación de ficheros ASCII
      • Tutor de portapapeles
      • Tutor de procesos
      • Tutor de SDV
    • Tutores de scripts
      • QML: hola mundo
      • QML: tutor básico
      • QML: tutor de vistas
      • Tutor de XMLHttpRequest (webServices)
  • Velneo cloud
    • ¿Qué es Velneo Cloud?
    • Panel de control vServer cloud
      • URC
      • vServer
      • Apache
      • SFTP
      • Usuarios
    • Copias de seguridad
    • Velneo cloud API
      • Uso de Velneo cloud API
    • Explorador de archivos cloud sFTP
    • TCP en Velneo cloud
    • Velneo vModApache en cloud
    • SLA
    • Hora de los servidores en el cloud de Velneo
    • ¿Qué puedo hacer si tengo una incidencia en mi servidor cloud?
Con tecnología de GitBook
En esta página
  • Introducción
  • Comandos para programación de protocolos
  • Comandos de gestión de protocolos
  • Proyecto de datos
  • Proyecto de aplicación
  • Protocolo de envío de fichero
  • Probando el tutor

¿Te fue útil?

  1. Velneo vTutor
  2. Tutores de objetos avanzados

Tutor de protocolo TCP/IP

Última actualización hace 4 años

¿Te fue útil?

Introducción

Se trata de un objeto que nos permite implementar un protocolo de comunicaciones TCP/IP en proyectos de Velneo. A través del mismo podremos implementar tanto la parte cliente de un protocolo como la parte servidora, según requieran nuestros proyectos. Es decir, que podremos crear un servicio TCP para comunicarnos con clientes TCP o implementar la parte cliente de un protocolo TCP para comunicarnos como clientes con otros servidores TCP/IP.

Mediante este objeto podremos tanto crear un protocolo propio de comunicaciones como para comunicarnos con desarrollos externos que usen el estándar TCP/IP para comunicarse.

Tanto la programación como la gestión de los protocolos TCP/IP será implementada mediante objetos programables ().

El objeto Protocolo TCP/IP dispone de dos subobjetos programables, llamados intercomunicadores, llamados CLIENT y SERVER.

SERVER es un proceso, y lo programaremos en el caso de que queramos crear un servicio TCP/IP.

CLIENT es una función-proceso (objeto similar al proceso pero que puede recibir parámetros) y que programaremos en caso de crear un cliente TCP/IP.

Existe una carpeta de comandos de instrucción de proceso donde se recogen todos los comandos de instrucción disponibles para los protocolos TCP/IP. Éstos pueden dividirse en dos grupos: comandos para programación de protocolo y comandos de gestión de protocolos.

Comandos para programación de protocolos

Son comandos que usaremos para programar los protocolos, tanto de cliente como de servidor, y son:

: envía un buffer de datos a un cliente/servidor TCP. : envía un fichero a un cliente/servidor TCP. : envía una línea de datos a un cliente/servidor TCP. : envía un byte de datos a un cliente/servidor TCP. : envía un entero de 16 bits a un cliente/servidor TCP. : envía un entero de 32 bits a un cliente/servidor TCP. : recibe y guarda en disco un fichero enviado por un cliente/servidor TCP. : permite extraer bytes de una cadena de datos enviado por un cliente TCP hasta un carácter de marca concreto. : recibe una línea de datos enviada por un cliente/servidor TCP. : recibe un byte de datos enviado desde un cliente/servidor TCP. : recibe un entero de 16 bits enviado desde un cliente/servidor TCP. : recibe un entero de 16 bits enviado desde un cliente/servidor TCP.

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

Comandos de gestión de protocolos

Son comandos que nos permiten gestionar los protocolos TCP y que podrán ser usados en cualquier objeto proceso o función externo al objeto Protocolo TCP/IP. Son:

: ejecuta la función declarada en el subobjeto (intercomunicador) CLIENT de un objeto Protocolo TCP/IP. : inicia un servicio TCP/IP en un puerto determinado. A partir de ese momento cada vez que un cliente TCP/IP establezca una conexión a través de ese puerto, se disparará el proceso programado en el subobjeto (intercomunicador) SERVER del objeto Protocolo TCP/IP. : permite comprobar si está iniciado o no el servicio de un objeto Protocolo TCP/IP. : termina el servicio correspondiente a un objeto Protocolo TCP/IP iniciado en la sesión actual. : termina todos los servicios correspondientes a objetos Protocolos TCP/IP iniciados en la sesión actual.

En este tutor hemos creado un protocolo para enviar ficheros entre dos aplicaciones de Velneo, por lo tanto, en el objeto protocolo hemos programado la parte cliente y la servidora del protocolo.

Todos los objetos de este tutor los encontraremos en la carpeta tutores/avanzados/protocolo TCP del proyecto de aplicación de vTutor.

En primer lugar explicaremos qué objetos hemos creado en el proyecto de datos, explicaremos el circuito completo programado para la ejecución del protocolo y la explicación del código programado en los intercomunicadores.

Proyecto de datos

Proyecto de aplicación

Todo el manejo de los protocolos se hará desde el formulario llamado TUT_TCP. En él se edita una variable local para que podamos especificar la IP en la que estará a la escucha nuestro servicio TCP.

Protocolo de envío de fichero

Crearemos un protocolo en el que el cliente enviará un fichero al servidor, éste lo gudará en su directorio temporal y enviará una confirmación al cliente de que lo ha recibido correctamente. byte (un valor comprendido entre 0 y 255), el servidor lo recibirá y dará de alta un registro en la tabla de mensajes con el dato recibido, fecha y hora de recepción.

Identificador: TUT_TCP.

Nombre: envío recepción de fichero.

Fórmula puerto de escucha: $TCP_POR@velneo_vTutor_dat.dat, que es la variable global que hemos creado a tal efecto en el proyecto de datos de vTutor.

Observaremos cómo este objeto tiene dos subobjetos (intercomunicadores) llamados CLIENT y SERVER.

CLIENT es el subobjeto donde se programará la parte del protocolo relativa al cliente TCP/IP y SERVER es el subobjeto donde se programará la parte del protocolo relativa al servidor TCP/IP.

La secuencia de este protocolo será:

Cliente: Recibirá la senda de un fichero como parámetro. Calculará su tamaño. Enviará al servidor una cadena con el nombre del fichero y su tamaño en bytes, separados por un carácter de marca. A continuación enviará el fichero. Esperará a que el servidor le devuelve una respuesta. Emitirá un mensaje con el resultado de la operación.

Servidor: Recibirá la cadena que contiene el nombre y luego el dato con el tamaño del fichero. Recibirá el fichero. Lo guardará en en disco. Devolverá un 1 si lo ha recibido o un 0 si no ha podido.

Como puede observarse, el protocolo es una "conversación" estructurada y convenida entre el cliente y el servidor.

Programación del intercomunicador CLIENT

Una vez creada la variable haremos doble clic sobre el subobjeto CLIENT para editarlo y en sus propiedades le asignaremos como parámetro 1 la variable que acabamos de crear:

Una vez declarado el parámetro ya podremos programar la función cliente:

Rem ( Proceso de cliente )
Libre
Rem ( Obtenemos el tamaño del fichero a enviar )
Get atributos del fichero ( FIC, FCH, HOR, TAM_BYT )
Libre
Rem ( Se envía al servidor una línea con el nombre del archivo, un carácter de marca y su longitud )
Protocolo TCP: enviar línea ( getPathFileName(FIC) + "|" + TAM_BYT, 10 )
Libre
Rem ( Enviamos el fichero al servidor )
Protocolo TCP: enviar fichero ( FIC, 30 )
Libre
Rem ( Esperamos la respuesta del servidor: 1= todo Ok, 2 = no ha podido recibir el fichero )
Protocolo TCP: recibir byte ( BYT, 60 )
Libre
Rem ( Lo que recibimos es un byte así que lo convertimos a carácter con la función getAsciiChar )
If ( getAsciiChar(BYT, "ISO-8859-1")="1" )
    Mensaje ( "Fichero enviado con éxito", Información, ,  )
Else
    Mensaje ( "Ha habido un problema con el envío del fichero", Información, ,  )

Programación del intercomunicador SERVER

Haremos doble clic sobre el subobjeto SERVER y su contenido será:

Rem ( Proceso de servidor )
Libre
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 ( FIC, "|", 10 )
Libre
Rem ( Quitamos el carácter de marca al nombre del fichero )
Set ( FIC, left(FIC, len(FIC)-1) )
Libre
Rem ( Recepción del tamaño del fichero (dato que va a continuación del carácter de marca) )
Protocolo TCP: recibir línea ( TAM, 10 )
Libre
Rem ( Recibir el fichero )
Protocolo TCP: recibir fichero ( tempPath() + "/" + FIC, 10 )
Libre
Rem ( Comprobamos si el fichero ha sido guardado )
¿Existe fichero? ( tempPath() + "/" + FIC, OK_EXI_FIC, TAM_BYT )
If ( (OK_EXI_FIC) & (TAM_BYT = TAM) )
    Libre
    Rem ( Enviamos el byte 1 si todo ha ido bien y un 0 si ha habido algún problema )
    Set ( BYT, stringToNumber(getAsciiCharCode("1", "ISO-8859-1")) )
Else
    Set ( BYT, stringToNumber(getAsciiCharCode("0", "ISO-8859-1")) )
Libre
Protocolo TCP: enviar byte ( BYT, 10 )

Ahora vamos a presentar ambos procesos, para que podamos comprobar mejor la secuencia del protocolo:

Una vez creado el objeto protocolo, crearemos los objetos necesarios para interactuar con él, todos han sido programados en el formulario TUT_TCP que encontraremos dentro de la carpeta de objetos de este tutor.

Rem ( Iniciar/detener el servicio TCP )
Libre
Rem ( Comprobamos si está iniciado el servicio )
Protocolo TCP: ¿esta iniciado el servicio? ( TUT_TCP@velneo_vTutor_app, OK_TCP_ON,  )
Libre
Rem ( Sin no está iniciado, lo iniciamos. )
If ( !OK_TCP_ON )
    Protocolo TCP: iniciar servicio ( TUT_TCP@velneo_vTutor_app, OK_TCP_ON )
    If ( !OK_TCP_ON )
        Mensaje ( "No se ha podido iniciar el servicio. Asegúrese de que el puerto seleccionado esté disponible.", Información, ,  )
Else
    Libre
    Rem ( Si está iniciado, lo detenemos )
    Protocolo TCP: terminar servicio ( TUT_TCP@velneo_vTutor_app, OK_TCP_DET )
    If ( OK_TCP_DET )
        Set ( OK_TCP_ON, 0 )
Rem ( Pedir al cliente que seleccione el fichero a enviar )
Libre
Ventana de selección de fichero ( FIC, OK_FIC_SEL, "*.*", "" )
If ( OK_FIC_SEL )
    Libre
    Rem ( El comando siguiente ejecuta el proceso programado en el intercomunicador cliente del objeto protocolo TCP/IP )
    Protocolo TCP: ejecutar funcion cliente ( TUT_TCP@velneo_vTutor_app, TCP_IP, FICHERO, OK_CON )
    If ( !OK_CON )
        Mensaje ( "Conexión fallida", Información, ,  )

Probando el tutor

Para probarlo necesitamos ejecutar vTutor desde dos sesiones de vClient distintas.

En una de ellas especificaremos el nº de puerto y pondremos en marcha el protocolo y, en la otra, debemos especificar también el nº de puerto, la IP a la que vamos a conectarnos, que será la IP de la máquina donde tengamos ejecutada la otra sesión de vClient, y pulsaremos el botón “enviar fichero”.

En el proyecto de datos hemos creado una , de tipo numérico y con persistencia en memoria, llamada TCP_POR que usaremos para parametrizar el número de puerto que usaremos para establecer la comunicación entre el cliente y el servidor de nuestro protocolo. Se inicializará con el valor 6901.

Para crear un objeto de este tipo pulsaremos el siguiente icono de la galería de objetos de Velneo vDevelop:. Al objeto le hemos asignado las propiedades siguientes:

CLIENT es un subobjeto programable tipo (similar al proceso, pero que admite parámetros) y SERVER es un objeto programable tipo proceso. Para programar uno de ellos haremos doble clic sobre el mismo para abrir el editor de procesos:

Tal y como acabamos de indicar la función CLIENT recibirá un parámetro. Éste será declarado como subobjeto del objeto Protocolo TCP/IP, para ello seleccionamos el protocolo que acabamos de crear y pulsamos el botón del panel de subobjetos y seleccionaremos la opción "variable". A la variable le daremos el Identificador FIC y será de Tipo alfabético.

Hemos creado un control de para especificar el nº de puerto del protocolo. Recordemos que para ello habíamos creado la variable global TCP_POR.

Hemos creado un para iniciar/detener el servicio TCP. Lo que hará será disparar un manejador de evento para poner a la escucha o detener el servicio TCP en esa sesión de vClient:

Y un que dispara un manejador de evento que solicita un fichero y ejecuta el intercomunicador cliente del protocolo, pasando la senda del fichero seleccionado como parámetro:

variable global
función
edición numérica
botón SVG
botón
procesos
Protocolo TCP: enviar buffer
Protocolo TCP: enviar fichero
Protocolo TCP: enviar línea
Protocol TCP: enviar byte
Protocolo TCP: enviar entero 16 bits
Protocolo TCP: enviar entero 32 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: ejecutar función cliente
Protocolo TCP: iniciar servicio
Protocolo TCP: ¿está iniciado el servicio?
Protocolo TCP: terminar servicio
Protocolo TCP: terminar todos los servicios