TsgcTCPClient › Methoden › WriteData
Sendet eine Text- oder Binärnachricht über den rohen Socket an den TCP-Server.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Typ | Beschreibung |
|---|---|---|
aText | const String | Die an den Server zu sendende Textnutzlast. Die Bytes werden ohne jeglichen Framing-Header direkt in den TCP-Socket geschrieben. |
aSize | const Integer | Optionale Fragmentgröße in Bytes; wenn größer als null, wird die Payload in mehrere Chunks dieser Größe aufgeteilt. Verwenden Sie 0 (den Standard), um die gesamte Payload in einem einzigen Schreibvorgang zu senden. |
aStreaming | const TwsStreaming | Streaming-Modus für die fragmentierte Übertragung (stmNone, stmStart, stmContinue, stmFinish). Standardmäßig stmNone, was die Nutzlast als einzelnen eigenständigen Schreibvorgang sendet. |
WriteData überträgt die Zeichenfolge als rohe Bytes auf der aktiven TCP-Verbindung. Anders als beim WebSocket-Client gibt es keinen Text-Frame-Header; der Peer empfängt genau die Bytes, die Sie senden, sodass sich beide Enden auf einen Trenner oder ein Längenpräfix einigen müssen. Standardmäßig läuft der Aufruf im aufrufenden Thread und kehrt zurück, sobald die Bytes an den Socket übergeben wurden. Wenn QueueOptions.Text auf einen anderen Wert als qmNone gesetzt ist, wird die Nachricht in eine Queue gestellt und tatsächlich aus dem eigenen Thread der Verbindung gesendet, was Sperren verhindert, wenn mehrere Threads gleichzeitig schreiben. Jede Socket-Ausnahme wird an OnError weitergeleitet. Verwenden Sie die Stream-Überladung beim Senden großer Payloads oder binärer Daten.
Wenn der Client nicht verbunden ist, wird nichts gesendet, und der Fehlschlag wird über OnError mit Connection = nil und dem Fehler Data not sent, the client is not connected or its handshake has not completed. gemeldet (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). Das Ereignis wird auf dem aufrufenden Thread ausgelöst, bevor WriteData zurückkehrt, und LastError enthält denselben Text. Es wird keine Ausnahme an den Aufrufer weitergegeben, und der Client wird nicht getrennt. Setzen Sie Options.RaiseDisconnectExceptions im Code auf False, um diese Meldung zu überspringen und die Nachricht stillschweigend zu verwerfen, wie es frühere Versionen taten. Wenn ein Schreibvorgang fehlschlägt, weil seine Verbindung verloren ging und der Client bereits erneut verbunden ist, wird der Fehlschlag ebenfalls mit Connection = nil gemeldet, sodass die neue Verbindung geöffnet bleibt.
oClient.WriteData('Hello Server');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Typ | Beschreibung |
|---|---|---|
aStream | const TStream | Quellstream, dessen Inhalt als rohe Bytes in den Socket geschrieben wird. Der Aufrufer bleibt Eigentümer des Streams. |
aSize | const Integer | Optionale Fragmentgröße in Bytes; wenn größer als null, wird der Stream in mehrere Blöcke dieser Größe aufgeteilt. Verwenden Sie 0 (den Standardwert), um den gesamten Stream in einem einzigen Schreibvorgang zu senden. |
aStreaming | const TwsStreaming | Streaming-Modus für die fragmentierte Übertragung (stmNone, stmStart, stmContinue, stmFinish). Standardmäßig stmNone, wodurch der Stream als einzelner eigenständiger Schreibvorgang gesendet wird. |
WriteData liest den bereitgestellten Stream ab seiner aktuellen Position und überträgt den Inhalt als rohe Bytes auf dem TCP-Socket. Da der TCP-Client Daten nicht in WebSocket-Frames verpackt, muss der Peer wissen, wie er die eingehenden Bytes abgrenzt (typischerweise über ein Längenpräfix oder einen Trennzeichen auf Anwendungsebene). Der Aufruf läuft standardmäßig im aufrufenden Thread; wenn QueueOptions.Binary auf einen anderen Wert als qmNone gesetzt ist, wird die Nachricht eingereiht und tatsächlich vom Verbindungsthread aus versendet. Socket-Ausnahmen werden erfasst und an OnError weitergeleitet. Wenn der Client nicht verbunden ist, wird nichts gesendet, und der Fehlschlag wird über OnError mit Connection = nil gemeldet, wie für die Text-Überladung beschrieben. Geben Sie den Stream erst frei, nachdem der Aufruf zurückgekehrt ist (oder, beim Einreihen, nachdem das Senden abgeschlossen ist).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;