TsgcTCPClient › Methoden › WriteData
Verzendt een tekst- of binair bericht naar de TCP-server via de raw socket.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Naam | Type | Beschrijving |
|---|---|---|
aText | const String | De tekstpayload om naar de server te sturen. De bytes worden rechtstreeks naar de TCP-socket geschreven zonder enig frame-header. |
aSize | const Integer | Optionele fragmentgrootte in bytes; wanneer groter dan nul wordt de payload opgesplitst in meerdere blokken van deze grootte. Gebruik 0 (de standaard) om de gehele payload in één schrijfbewerking te verzenden. |
aStreaming | const TwsStreaming | Streamingmodus voor gefragmenteerde verzending (stmNone, stmStart, stmContinue, stmFinish). Standaard stmNone, waarbij de payload als een enkelvoudige standalone schrijfbewerking wordt verzonden. |
WriteData verzendt de tekenreeks als onbewerkte bytes op de actieve TCP-verbinding. In tegenstelling tot de WebSocket-client is er geen tekstframe-header; de peer ontvangt precies de bytes die u verzendt, zodat beide kanten het eens moeten zijn over een scheidingsteken of lengteprefix. Standaard wordt de aanroep uitgevoerd op de aanroepende thread en keert terug zodra de bytes aan de socket zijn overgedragen. Wanneer QueueOptions.Text is ingesteld op een andere waarde dan qmNone, wordt het bericht in een wachtrij geplaatst en daadwerkelijk verzonden vanuit de eigen thread van de verbinding, wat vergrendeling voorkomt wanneer meerdere threads gelijktijdig schrijven. Elke socketuitzondering wordt doorgestuurd naar OnError. Gebruik de stream-overload bij het verzenden van grote payloads of binaire gegevens.
Wanneer de client niet is verbonden, wordt er niets verzonden en wordt de fout gemeld via OnError met Connection = nil en de foutmelding Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). De gebeurtenis wordt geactiveerd op de aanroepende thread voordat WriteData terugkeert, en LastError bevat dezelfde tekst. Er wordt geen uitzondering naar de aanroeper gegenereerd en de verbinding wordt niet verbroken. Stel Options.RaiseDisconnectExceptions in code in op False om deze melding over te slaan en het bericht stilzwijgend te laten vallen, zoals in eerdere versies. Wanneer een schrijfbewerking mislukt omdat de verbinding verloren is gegaan en de client al opnieuw is verbonden, wordt de fout ook gemeld met Connection = nil, zodat de nieuwe verbinding open blijft.
oClient.WriteData('Hello Server');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Naam | Type | Beschrijving |
|---|---|---|
aStream | const TStream | Bronstream waarvan de inhoud als ruwe bytes naar de socket wordt geschreven. De aanroeper blijft eigenaar van de stream. |
aSize | const Integer | Optionele fragmentgrootte in bytes; wanneer deze groter is dan nul, wordt de stream opgesplitst in meerdere chunks van deze grootte. Gebruik 0 (de standaard) om de hele stream in één schrijfbewerking te verzenden. |
aStreaming | const TwsStreaming | Streamingmodus voor gefragmenteerde verzending (stmNone, stmStart, stmContinue, stmFinish). Standaard stmNone, wat de stream als één op zichzelf staand schrijfbewerkingen verzendt. |
WriteData leest de opgegeven stream vanaf zijn huidige positie en verzendt de inhoud als onbewerkte bytes op de TCP-socket. Omdat de TCP-client gegevens niet verpakt in WebSocket-frames, moet de peer weten hoe de inkomende bytes te begrenzen (doorgaans via een lengteprefix of een scheidingsteken op applicatieniveau). De aanroep wordt standaard uitgevoerd op de aanroepende thread; wanneer QueueOptions.Binary is ingesteld op een andere waarde dan qmNone, wordt het bericht in de wachtrij geplaatst en daadwerkelijk verzonden vanuit de verbindingsthread. Socket-uitzonderingen worden vastgelegd en doorgestuurd naar OnError. Wanneer de client niet is verbonden, wordt er niets verzonden en wordt de fout gemeld via OnError met Connection = nil, zoals beschreven voor de tekst-overload. Geef de stream pas vrij nadat de aanroep is teruggekeerd (of, bij gebruik van wachtrijen, nadat de verzending is voltooid).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;