TsgcTCPClient › Metodi › WriteData
Invia un messaggio di testo o binario al server TCP tramite il socket grezzo.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Nome | Tipo | Descrizione |
|---|---|---|
aText | const String | Il payload di testo da inviare al server. I byte vengono scritti direttamente sul socket TCP senza alcun header di framing. |
aSize | const Integer | Dimensione opzionale del frammento in byte; quando è maggiore di zero il payload viene suddiviso in più blocchi di questa dimensione. Utilizzare 0 (il valore predefinito) per inviare l'intero payload in una singola scrittura. |
aStreaming | const TwsStreaming | Modalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia il payload come un'unica scrittura autonoma. |
WriteData trasmette la stringa come byte grezzi sulla connessione TCP attiva. A differenza del client WebSocket non è presente alcuna intestazione di frame di testo; il peer riceve esattamente i byte inviati, pertanto entrambe le estremità devono concordare su un separatore o un prefisso di lunghezza. Per impostazione predefinita la chiamata viene eseguita nel thread del chiamante e restituisce il controllo una volta che i byte sono stati passati al socket. Quando QueueOptions.Text è impostato su un valore diverso da qmNone, il messaggio viene accodato e inviato effettivamente dal thread della connessione, il che evita i lock quando più thread scrivono contemporaneamente. Qualsiasi eccezione del socket viene inoltrata a OnError. Utilizzare l'overload con stream per l'invio di payload di grandi dimensioni o dati binari.
Quando il client non è connesso, non viene inviato nulla e l'errore viene segnalato tramite OnError con Connection = nil e l'errore Data not sent, the client is not connected or its handshake has not completed. (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). L'evento viene generato sul thread chiamante prima che WriteData restituisca il controllo, e LastError contiene lo stesso testo. Nessuna eccezione viene sollevata verso il chiamante e il client non viene disconnesso. Impostare Options.RaiseDisconnectExceptions su False nel codice per ignorare questa segnalazione e scartare il messaggio silenziosamente, come facevano le versioni precedenti. Quando un invio fallisce perché la sua connessione è andata persa e il client si è già riconnesso, l'errore viene segnalato comunque con Connection = nil, in modo che la nuova connessione resti aperta.
oClient.WriteData('Hello Server');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Nome | Tipo | Descrizione |
|---|---|---|
aStream | const TStream | Stream sorgente il cui contenuto verrà scritto nel socket come byte grezzi. Il chiamante rimane proprietario dello stream. |
aSize | const Integer | Dimensione facoltativa del frammento in byte; quando è maggiore di zero, il flusso viene suddiviso in più blocchi di questa dimensione. Utilizzare 0 (predefinito) per inviare l'intero flusso in un'unica scrittura. |
aStreaming | const TwsStreaming | Modalità di streaming per la trasmissione frammentata (stmNone, stmStart, stmContinue, stmFinish). Il valore predefinito è stmNone, che invia lo stream come un'unica scrittura autonoma. |
WriteData legge lo stream fornito dalla sua posizione corrente e trasmette il contenuto come byte grezzi sul socket TCP. Poiché il client TCP non racchiude i dati in frame WebSocket, il peer deve sapere come delimitare i byte in entrata (tipicamente tramite un prefisso di lunghezza o un separatore a livello applicativo). La chiamata viene eseguita sul thread chiamante per impostazione predefinita; quando QueueOptions.Binary è impostato su un valore diverso da qmNone, il messaggio viene accodato e inviato effettivamente dal thread di connessione. Le eccezioni socket vengono catturate e inoltrate a OnError. Quando il client non è connesso, non viene inviato nulla e l'errore viene segnalato tramite OnError con Connection = nil, come descritto per l'overload di testo. Liberare lo stream solo dopo che la chiamata è tornata (o, in caso di accodamento, dopo che l'invio è completato).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;