TsgcTCPClient › Métodos › WriteAndWaitData

WriteAndWaitData Método

Envía un mensaje y bloquea al llamante hasta que el servidor responde con una respuesta coincidente o se agota el tiempo de espera.

Sobrecargas

Sobrecarga 1

Sintaxis

function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;

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.
aTimeoutconst IntegerTiempo máximo en milisegundos para esperar la respuesta del servidor. El valor predeterminado es 10000 (10 segundos).

Valor de Retorno

El mensaje de texto recibido del servidor, o una cadena vacía cuando el tiempo de espera expiró, no había ninguna conexión disponible o se produjo un error. (string)

Observaciones

WriteAndWaitData es un helper de conveniencia para intercambios de tipo solicitud/respuesta sobre un socket TCP plano. Escribe la cadena como bytes sin procesar y luego bloquea el hilo invocante en un evento interno hasta que llega la siguiente carga útil de texto entrante o se agota el tiempo de espera. Dado que el cliente TCP no enmarca los mensajes, el par debe devolver una respuesta auto-delimitada que el componente pueda exponer a través de OnMessage. Dado que la llamada bloquea, no debe invocarse desde el hilo principal de la interfaz de usuario a menos que se use un tiempo de espera corto. Se devuelve una cadena vacía cuando el servidor no responde a tiempo; las excepciones a nivel de socket se capturan y se reenvían a OnError. Use la sobrecarga de flujo cuando necesite enviar y recibir cargas útiles binarias.

Cuando el cliente no está conectado, WriteAndWaitData no envía nada y devuelve una cadena vacía de inmediato en lugar de esperar al tiempo de espera. 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 el método 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.

Ejemplo


vReply := oClient.WriteAndWaitData('REQUEST', 5000);
if vReply <> '' then
  ShowMessage(vReply);

Sobrecarga 2

Sintaxis

function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;

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 de salida se divide en múltiples fragmentos de ese tamaño. Use 0 (el valor predeterminado) para enviar todo el flujo en una sola 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.
aTimeoutconst IntegerTiempo máximo en milisegundos para esperar la respuesta del servidor. El valor predeterminado es 10000 (10 segundos).

Valor de Retorno

Un stream recién asignado que contiene la respuesta binaria recibida del servidor, o nil cuando expiró el tiempo de espera, no había ninguna conexión disponible o se produjo un error. El llamador es responsable de liberar el stream devuelto. (TStream)

Observaciones

Esta sobrecarga es la contraparte binaria de la sobrecarga de texto. Escribe el flujo suministrado como bytes sin procesar en el socket TCP y luego bloquea el hilo llamante en un evento interno hasta que llegue la siguiente carga útil binaria entrante a través de OnBinary o hasta que expire el tiempo de espera. Dado que el cliente TCP no encapsula los datos en tramas, el par debe enviar una respuesta autodelimitada que el componente pueda entregar como mensaje discreto. Como la llamada bloquea, evite invocarla desde el hilo principal de la interfaz de usuario con un tiempo de espera largo. El valor de retorno es nil cuando el servidor no responde a tiempo; las excepciones se capturan y se reenvían a OnError. Cuando el cliente no está conectado, el método devuelve nil de inmediato sin esperar al tiempo de espera e informa del fallo a través de OnError con Connection = nil, tal y como se describe para la sobrecarga de texto. Libere tanto el flujo de origen (después de la llamada) como el flujo devuelto cuando haya terminado con ellos.

Ejemplo


oRequest := TMemoryStream.Create;
try
  oRequest.LoadFromFile('request.bin');
  oReply := oClient.WriteAndWaitData(oRequest, 0, stmNone, 5000);
  try
    if Assigned(oReply) then
      oReply.SaveToFile('reply.bin');
  finally
    oReply.Free;
  end;
finally
  oRequest.Free;
end;

Volver a Métodos