DocumentaciónHAY_DATOS(s)

HAY_DATOS(s)\texttt{HAY\_DATOS}(s)

Nombre

HAY_DATOS - Indica si un socket tiene datos listos para leer.

Sinopsis

ok = HAY_DATOS(s)

Descripcion

Consulta si hay datos disponibles para lectura sin bloquear la ejecucion.

Es util para construir ciclos de espera activa o chequeos previos a una llamada a RECIBIR().

Comportamiento

  • Recibe un SOCKET por referencia.
  • No consume los datos; solo informa su disponibilidad.
  • Retorna VERDADERO si hay datos listos para leer.

Funciones API relacionadas

  • RECIBIR()
  • CONECTAR()

Parámetros

ParámetroTipoDescripción
sSOCKETSocket por referencia.

Valor de retorno

LOGICO - Resultado logico.

  • VERDADERO: hay datos disponibles.
  • FALSO: en caso contrario.

Ejemplo

ejemplo.blox
FUNCION PRINCIPAL

INICIO "Cliente de Chat"

    SOCKET s
    s.ip = "127.0.0.1"
    s.port = 5555

    STRING mensaje_enviar, mensaje_recibido, tecla
    NUMERICO n
    LOGICO continuar

    CONECTAR(s)
    continuar = VERDADERO
    mensaje_enviar = ""

    IMPRIMIR("\nyo> ")

    MIENTRAS (continuar) HACER

        // 1. Leer red solo si hay datos disponibles
        SI (HAY_DATOS(s)) ENTONCES
            SI (RECIBIR(s)) ENTONCES
                mensaje_recibido = s.data
                IMPRIMIR("\n\nservidor> ", mensaje_recibido)

                SI (IGUAL(mensaje_recibido, "salir")) ENTONCES
                    continuar = FALSO
                SINO
                    IMPRIMIR("\nyo> ", mensaje_enviar)
                FIN_SI
            FIN_SI
        FIN_SI

        // 2. Leer teclado sin bloquear
        SI (HAY_TECLA()) ENTONCES
            tecla = LEER_TECLA()

            SI (IGUAL(tecla, "ENTER")) ENTONCES
                SI (!IGUAL(mensaje_enviar, "")) ENTONCES
                    ENVIAR(s, mensaje_enviar)

                    SI (IGUAL(mensaje_enviar, "salir")) ENTONCES
                        continuar = FALSO
                    FIN_SI

                    mensaje_enviar = ""
                    IMPRIMIR("\nyo> ")
                FIN_SI
            SINO
                SI (IGUAL(tecla, "BACKSPACE")) ENTONCES
                    n = LONGITUD(mensaje_enviar)
                    SI (n > 0) ENTONCES
                        mensaje_enviar = SUBSTR(mensaje_enviar, 1, n - 1)
                    FIN_SI
                SINO
                    SI (LONGITUD(tecla) == 1) ENTONCES
                        mensaje_enviar = UNIR(mensaje_enviar, tecla)
                        IMPRIMIR(tecla)
                    FIN_SI
                FIN_SI
            FIN_SI
        FIN_SI

        ESPERAR(10)

    FIN_MIENTRAS

    DESCONECTAR(s)
    IMPRIMIR("\nCliente desconectado.")

FIN_FUNCION