Saltar al contenido principal
Versión: 20 R10 BETA

UDPSocket

La clase UDPSocket permite enviar y recibir paquetes UDP. UDP (User Datagram Protocol) es un protocolo de fácil implementación para el envío de datos. Es más rápido y sencillo que TCP (sólo 8 bytes de encabezado frente a los al menos 20 bytes en TCP), pero no ofrece el mismo nivel de fiabilidad. Es útil para aplicaciones en las que los datos deben llegar rápidamente a su destino. Sin embargo, no permite verificar la entrega, ni comprobar errores o recuperar datos que no se hayan entregado correctamente.

La clase UDPSocket está disponible en el class store 4D. Puede crear una conexión UDP utilizando la función 4D.UDPSocket.new(), que devuelve un objeto UDPSocket.

Gracias al refcounting de los objetos 4D estándar, un socket UDPSocket se libera automáticamente cuando deja de estar referenciado, es decir, cuando no existen más referencias a ellos en memoria. Esto ocurre típicamente, por ejemplo, al final de una ejecución de un método para variables locales. En consecuencia, los recursos asociados se limpian adecuadamente sin necesidad de un cierre explícito. Sin embargo, si quieres "forzar" el cierre de un socket en cualquier momento, nulifica sus referencias poniéndolas Null.

4DTCPUDPLog.txt file

Para depuración y monitorización, puede utilizar el fichero de registro 4DTCPUDPLog.txt que registra los eventos relacionados con los sockets UDP. Los eventos incluyen transmisión de datos, errores e información del ciclo de vida de la conexión.

Historia
LanzamientoModificaciones
20 R10Clase añadida

Ejemplo

Objeto UDPSocket

Un objeto UDPSocket no es modificable y no es streamable.

Los objetos UDPSocket ofrecen las siguientes propiedades y funciones:

errors : Collection
una colección de objetos de error asociados al socket
port : Number
el número de puerto a escuchar
.send( data : Blob ; hostName : Text ; remotePort : Integer )
envía data al servidor remoto hostName en el remotePort especificado

4D.UDPSocket.new()

4D.UDPSocket.new() : 4D.UDPSocket
4D.UDPSocket.new( options : Object ) : 4D.UDPSocket
4D.UDPSocket.new( port : Integer ) : 4D.UDPSocket
4D.UDPSocket.new( port : Integer ; options : Object ) : 4D.UDPSocket

ParámetrosTipoDescripción
portInteger->Puerto local utilizado para el socket UDP (0 u omitido = buscar cualquier puerto no utilizado para utilizar)
optionsObject->Configuración opciones para el socket
ResultadoUDPSocket<-Nuevo objeto UDPSocket

Descripción

La función 4D.UDPSocket.new() crea un nuevo socket UDP utilizando las options definidas (si las hay) en el port especificado (si lo hay) o en un puerto aleatorio no utilizado, y devuelve un objeto 4D.UDPSocket.

Parámetro options

En el parámetro options, puede pasar un objeto que contenga las siguientes propiedades:

PropiedadTipoDescripciónPor defecto
onDataFormulaRetrollamada activada cuando se reciben datosIndefinido
onErrorFormulaRetrollamada en caso de errorIndefinido
onTerminateFormulaRetrollamada activada cuando se libera el puertoIndefinido

Función callback (retrollamada)

Todas las funciones de retrollamada reciben dos parámetros:

ParámetrosTipoDescripción
$socketUDPSocket objectLa instancia UDPSocket actual.
$eventUDPEvent objectContiene información sobre el evento.

Secuencia de retrollamadas:

  1. onData se activa cada vez que se reciben datos.
  2. onError se activa si se produce un error.
  3. onTerminate siempre se activa justo antes de que el puerto se libere (el socket se cierra o se produce un error).

Objeto UDPEvent

Un objeto UDPEvent es devuelto cuando se llama una función de retrollamada.

.errors

errors : Collection

Descripción

La propiedad .errors contiene una colección de objetos de error asociados al socket. Cada objeto de error incluye el código de error, una descripción y la firma del componente que causó el error.

PropiedadTipoDescripción
errorsCollectionPila de error 4D en caso de error
[].errCodeNumberCódigo de error 4D
[].messageTextDescripción del error 4D
[].componentSignatureTextFirma del componente interno que ha devuelto el error

.port

port : Number

Descripción

La propiedad .port contiene el número de puerto a escuchar. Esta propiedad es de solo lectura.

.send()

.send( data : Blob ; hostName : Text ; remotePort : Integer )

ParámetrosTipoDescripción
dataBlob->Datos a enviar
hostNameText->Nombre o dirección IP del servidor
remotePortInteger->Puerto remoto al que conectarse (0=cualquiera)

Descripción

La función send() envía data al servidor remoto hostName en el remotePort especificado.

hostName es el nombre o la dirección IP del servidor al que se enviarán los datos.

remotePort es el número del puerto al que hay que conectarse. Si pasa 0, se utilizará cualquier puerto disponible.

Ver también

UDPEvent