TsgcTCPClient › メソッド › WriteData

WriteData メソッド

生のソケットを通じてテキストまたはバイナリメッセージを TCP サーバーに送信します。

オーバーロード

オーバーロード 1

構文

procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

パラメータ

名前タイプ説明
aTextconst Stringサーバーに送信するテキストペイロード。バイトはフレームヘッダーなしで TCP ソケットに直接書き込まれます。
aSizeconst Integerバイト単位のオプションの断片サイズ。ゼロより大きい場合、ペイロードはこのサイズの複数のチャンクに分割されます。ペイロード全体を1回の書き込みで送信するには0(デフォルト)を使用してください。
aStreamingconst TwsStreaming断片化された送信のストリーミングモード(stmNone、stmStart、stmContinue、stmFinish)。デフォルトは stmNone で、ペイロードを単一のスタンドアロン書き込みとして送信します。

解説

WriteData はアクティブな TCP 接続で文字列を生のバイトとして送信します。WebSocket クライアントとは異なり、テキストフレームヘッダーはありません。ピアはあなたが送信したバイトをそのまま受信するため、両端がセパレーターまたは長さプレフィックスで合意する必要があります。デフォルトでは、呼び出しは呼び出し元スレッドで実行され、バイトがソケットに渡されると戻ります。QueueOptions.Text が qmNone 以外の値に設定されている場合、メッセージはキューに入れられ、接続自身のスレッドから実際に送信されます。これにより、複数のスレッドが同時に書き込む際のロックが防止されます。ソケット例外は OnError に転送されます。大きなペイロードやバイナリデータを送信する場合はストリームオーバーロードを使用してください。

クライアントが接続されていない場合、何も送信されず、失敗は OnError を通じて Connection = nil とエラー Data not sent, the client is not connected or its handshake has not completed.(resourcestring S_ERROR_CLIENT_NOT_CONNECTED)で報告されます。このイベントは WriteData が返る前に呼び出し元スレッドで発生し、LastError にも同じテキストが保持されます。呼び出し元に例外は発生せず、クライアントも切断されません。以前のバージョンのようにこの報告を省略してメッセージを黙って破棄するには、コード内で Options.RaiseDisconnectExceptions を False に設定してください。接続が失われたために書き込みが失敗し、クライアントがすでに再接続している場合も、失敗は Connection = nil で報告されるため、新しい接続は開いたままになります。

使用例


oClient.WriteData('Hello Server');

オーバーロード 2

構文

procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);

パラメータ

名前タイプ説明
aStreamconst TStreamその内容が生のバイトとしてソケットに書き込まれるソースストリーム。呼び出し元がストリームの所有者のままです。
aSizeconst Integerオプションのフラグメントサイズ(バイト単位)。0 より大きい場合、ストリームはこのサイズの複数のチャンクに分割されます。0(デフォルト)を使用すると、ストリーム全体を 1 回の書き込みで送信します。
aStreamingconst TwsStreamingフラグメント送信のストリーミングモード(stmNone、stmStart、stmContinue、stmFinish)。デフォルトは stmNone で、ストリームを単一のスタンドアロン書き込みとして送信します。

解説

WriteData は提供されたストリームを現在の位置から読み取り、内容を TCP ソケット上で生のバイトとして送信します。TCP クライアントはデータを WebSocket フレームでラップしないため、ピアは受信バイトを区切る方法を知っている必要があります(通常は長さプレフィックスまたはアプリケーションレベルのセパレーター経由)。呼び出しはデフォルトで呼び出しスレッドで実行されます。QueueOptions.Binary が qmNone 以外の値に設定されている場合、メッセージはキューに入れられ、接続スレッドから実際にディスパッチされます。ソケット例外はキャプチャされて OnError に転送されます。クライアントが接続されていない場合、何も送信されず、失敗は テキストオーバーロード で説明されているとおり、Connection = nil で OnError を通じて報告されます。呼び出しが返った後(またはキューイング時は送信完了後)にストリームを解放してください。

使用例


oStream := TMemoryStream.Create;
try
  oStream.LoadFromFile('payload.bin');
  oClient.WriteData(oStream);
finally
  oStream.Free;
end;

メソッドに戻る