TsgcTCPClient › Métodos › WriteData
Envia uma mensagem de texto ou binária ao servidor TCP sobre o socket bruto.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Type | Descrição |
|---|---|---|
aText | const String | O payload de texto a enviar ao servidor. Os bytes são escritos diretamente no socket TCP sem qualquer cabeçalho de framing. |
aSize | const Integer | Tamanho opcional do fragmento em bytes; quando maior que zero, o payload é dividido em múltiplos chunks deste tamanho. Utilize 0 (o padrão) para enviar todo o payload em uma única escrita. |
aStreaming | const TwsStreaming | Modo de streaming para transmissão fragmentada (stmNone, stmStart, stmContinue, stmFinish). O padrão é stmNone, que envia o payload como uma única gravação autônoma. |
WriteData transmite a string como bytes brutos na conexão TCP ativa. Diferente do cliente WebSocket, não há cabeçalho de frame de texto; o peer recebe exatamente os bytes que você envia, portanto ambas as pontas devem concordar com um separador ou prefixo de comprimento. Por padrão, a chamada é executada na thread chamadora e retorna assim que os bytes são entregues ao socket. Quando QueueOptions.Text é definido como um valor diferente de qmNone, a mensagem é enfileirada e efetivamente enviada a partir da própria thread da conexão, o que previne bloqueios quando várias threads escrevem concorrentemente. Qualquer exceção de socket é encaminhada para OnError. Utilize a sobrecarga com stream ao enviar cargas úteis grandes ou dados binários.
Quando o cliente não está conectado, nada é enviado e 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 WriteData 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 e descartar a mensagem silenciosamente, como faziam versões anteriores. Quando uma escrita falha porque sua conexão foi perdida e o cliente já reconectou, a falha também é relatada com Connection = nil, para que a nova conexão permaneça aberta.
oClient.WriteData('Hello Server');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Type | Descrição |
|---|---|---|
aStream | const TStream | Stream de origem cujo conteúdo será escrito no socket como bytes brutos. O chamador permanece como proprietário do stream. |
aSize | const Integer | Tamanho opcional do fragmento em bytes; quando maior que zero, o stream é dividido em múltiplos chunks deste tamanho. Utilize 0 (o padrão) para enviar o stream inteiro em uma única escrita. |
aStreaming | const TwsStreaming | Modo 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. |
WriteData lê o stream fornecido a partir de sua posição atual e transmite o conteúdo como bytes brutos no socket TCP. Como o cliente TCP não encapsula os dados em frames WebSocket, o peer deve saber como delimitar os bytes recebidos (normalmente via um prefixo de comprimento ou um separador em nível de aplicação). A chamada é executada na thread chamadora por padrão; quando QueueOptions.Binary é definido como um valor diferente de qmNone, a mensagem é enfileirada e efetivamente despachada a partir da thread da conexão. As exceções de socket são capturadas e encaminhadas a OnError. Quando o cliente não está conectado, nada é enviado e a falha é relatada através de OnError com Connection = nil, como descrito para a sobrecarga de texto. Libere o stream apenas depois que a chamada retornar (ou, ao enfileirar, depois que o envio for concluído).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;