TsgcTCPClient › メソッド › WriteData
生のソケットを通じてテキストまたはバイナリメッセージを TCP サーバーに送信します。
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| 名前 | タイプ | 説明 |
|---|---|---|
aText | const String | サーバーに送信するテキストペイロード。バイトはフレームヘッダーなしで TCP ソケットに直接書き込まれます。 |
aSize | const Integer | バイト単位のオプションの断片サイズ。ゼロより大きい場合、ペイロードはこのサイズの複数のチャンクに分割されます。ペイロード全体を1回の書き込みで送信するには0(デフォルト)を使用してください。 |
aStreaming | const 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');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| 名前 | タイプ | 説明 |
|---|---|---|
aStream | const TStream | その内容が生のバイトとしてソケットに書き込まれるソースストリーム。呼び出し元がストリームの所有者のままです。 |
aSize | const Integer | オプションのフラグメントサイズ(バイト単位)。0 より大きい場合、ストリームはこのサイズの複数のチャンクに分割されます。0(デフォルト)を使用すると、ストリーム全体を 1 回の書き込みで送信します。 |
aStreaming | const 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;