TsgcTCPClient › Métodos › WriteAndWaitData

WriteAndWaitData Method

Envia uma mensagem e bloqueia o chamador até que o servidor responda com uma resposta correspondente ou o timeout expire.

Overloads

Overload 1

Sintaxe

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

Parâmetros

NameTypeDescrição
aTextconst StringO payload de texto a enviar ao servidor. Os bytes são escritos diretamente no socket TCP sem qualquer cabeçalho de framing.
aTimeoutconst IntegerTempo máximo em milissegundos para aguardar a resposta do servidor. O padrão é 10000 (10 segundos).

Valor de retorno

A mensagem de texto recebida do servidor, ou uma string vazia quando o timeout expirou, nenhuma conexão estava disponível ou ocorreu um erro. (string)

Observações

WriteAndWaitData é um helper de conveniência para trocas no estilo requisição/resposta sobre um socket TCP simples. Ele grava a string como bytes brutos e então bloqueia a thread chamadora em um evento interno até que o próximo payload de texto de entrada chegue ou o timeout dispare. Como o cliente TCP não enquadra mensagens, o peer deve retornar uma resposta autodelimitada que o componente possa expor por meio de OnMessage. Como a chamada bloqueia, ela não deve ser invocada a partir da thread principal de UI a menos que um timeout curto seja utilizado. Uma string vazia é retornada quando o servidor não responde a tempo; exceções no nível do socket são capturadas e encaminhadas para OnError. Utilize a sobrecarga de stream quando você precisar enviar e receber payloads binários.

Quando o cliente não está conectado, WriteAndWaitData não envia nada e retorna uma string vazia imediatamente, em vez de aguardar o timeout. A falha é relatada através de OnError com Connection = nil e o erro Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). O evento é disparado na thread chamadora antes que o método retorne, e LastError contém o mesmo texto. Nenhuma exceção é gerada para o chamador e o cliente não é desconectado. Defina Options.RaiseDisconnectExceptions como False no código para ignorar este relato.

Exemplo


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

Sobrecarga 2

Sintaxe

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

Parâmetros

NameTypeDescrição
aStreamconst TStreamStream de origem cujo conteúdo será escrito no socket como bytes brutos. O chamador permanece como proprietário do stream.
aSizeconst IntegerTamanho de fragmento opcional em bytes; quando maior que zero, o stream de saída é dividido em múltiplos chunks deste tamanho. Use 0 (o padrão) para enviar todo o stream em uma única escrita.
aStreamingconst TwsStreamingModo de streaming para transmissão fragmentada (stmNone, stmStart, stmContinue, stmFinish). Assume stmNone por padrão, que envia o stream como uma única gravação independente.
aTimeoutconst IntegerTempo máximo em milissegundos para aguardar a resposta do servidor. O padrão é 10000 (10 segundos).

Valor de retorno

Um stream recém-alocado contendo a resposta binária recebida do servidor, ou nil quando o timeout expirou, nenhuma conexão estava disponível, ou ocorreu um erro. O chamador é responsável por liberar o stream retornado. (TStream)

Observações

Esta sobrecarga é a contrapartida binária da sobrecarga de texto. Ela grava o stream fornecido como bytes brutos no socket TCP e então bloqueia a thread chamadora em um evento interno até que o próximo payload binário recebido chegue via OnBinary ou o timeout seja atingido. Como o cliente TCP não encapsula dados em frames, o peer deve enviar uma resposta autodelimitada que o componente possa entregar como uma mensagem discreta. Como a chamada bloqueia, evite invocá-la a partir da thread de UI principal com um timeout longo. O valor de retorno é nil quando o servidor não responde a tempo; as exceções são capturadas e encaminhadas a OnError. Quando o cliente não está conectado, o método retorna nil imediatamente, sem aguardar o timeout, e relata a falha através de OnError com Connection = nil, como descrito para a sobrecarga de texto. Libere tanto o stream de origem (após a chamada) quanto o stream retornado quando terminar de usá-los.

Exemplo


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;

Voltar para Métodos