TsgcTCPClient › Métodos › WriteData

WriteData Método

Envía un mensaje de texto o binario al servidor TCP a través del socket sin procesar.

Sobrecargas

Sobrecarga 1

Sintaxis

procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

Parámetros

NombreTipoDescripción
aTextconst StringLa carga útil de texto que se enviará al servidor. Los bytes se escriben directamente en el socket TCP sin ninguna cabecera de encuadre.
aSizeconst IntegerTamaño de fragmento opcional en bytes; cuando es mayor que cero, la carga útil se divide en múltiples bloques de este tamaño. Use 0 (el valor predeterminado) para enviar toda la carga útil en una única escritura.
aStreamingconst TwsStreamingModo de streaming para transmisión fragmentada (stmNone, stmStart, stmContinue, stmFinish). El valor predeterminado es stmNone, que envía la carga útil como una escritura independiente única.

Observaciones

WriteData transmite la cadena como bytes sin procesar en la conexión TCP activa. A diferencia del cliente WebSocket, no hay encabezado de trama de texto; el par recibe exactamente los bytes que usted envía, por lo que ambos extremos deben acordar un separador o un prefijo de longitud. Por defecto, la llamada se ejecuta en el hilo del llamador y regresa una vez que los bytes se han entregado al socket. Cuando QueueOptions.Text se establece en un valor distinto de qmNone, el mensaje se pone en cola y se envía realmente desde el hilo propio de la conexión, lo que evita bloqueos cuando varios hilos escriben de forma concurrente. Cualquier excepción del socket se reenvía a OnError. Use la sobrecarga de stream al enviar cargas útiles grandes o datos binarios.

Cuando el cliente no está conectado, no se envía nada y el fallo se informa a través de OnError con Connection = nil y el error Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). El evento se activa en el hilo que realiza la llamada, antes de que WriteData retorne, y LastError contiene el mismo texto. No se genera ninguna excepción hacia el llamador y el cliente no se desconecta. Establezca Options.RaiseDisconnectExceptions en False en el código para omitir este aviso y descartar el mensaje en silencio, como hacían las versiones anteriores. Cuando una escritura falla porque su conexión se perdió y el cliente ya se ha reconectado, el fallo también se informa con Connection = nil, de modo que la nueva conexión permanece abierta.

Ejemplo


oClient.WriteData('Hello Server');

Sobrecarga 2

Sintaxis

procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

Parámetros

NombreTipoDescripción
aStreamconst TStreamStream de origen cuyo contenido se escribirá en el socket como bytes sin procesar. El llamante sigue siendo el propietario del stream.
aSizeconst IntegerTamaño de fragmento opcional en bytes; cuando es mayor que cero, el flujo se divide en múltiples fragmentos de ese tamaño. Use 0 (el valor predeterminado) para enviar todo el flujo en una única escritura.
aStreamingconst TwsStreamingModo de streaming para transmisión fragmentada (stmNone, stmStart, stmContinue, stmFinish). El valor predeterminado es stmNone, que envía el stream como una única escritura independiente.

Observaciones

WriteData lee el flujo proporcionado desde su posición actual y transmite el contenido como bytes sin procesar en el socket TCP. Dado que el cliente TCP no encapsula los datos en frames WebSocket, el extremo receptor debe saber cómo delimitar los bytes entrantes (normalmente mediante un prefijo de longitud o un separador a nivel de aplicación). La llamada se ejecuta por defecto en el hilo llamante; cuando QueueOptions.Binary tiene un valor distinto de qmNone, el mensaje se encola y se despacha realmente desde el hilo de conexión. Las excepciones de socket se capturan y se reenvían a OnError. Cuando el cliente no está conectado, no se envía nada y el fallo se informa a través de OnError con Connection = nil, tal y como se describe para la sobrecarga de texto. Libere el flujo solo después de que la llamada retorne (o, cuando se encola, después de que el envío se haya completado).

Ejemplo


oStream := TMemoryStream.Create;
try
  oStream.LoadFromFile('payload.bin');
  oClient.WriteData(oStream);
finally
  oStream.Free;
end;

Volver a Métodos