TsgcWebSocketClient › 方法 › WriteAndWaitData
发送文本消息并阻塞调用方,直到服务器以文本消息响应或超时为止。
function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;
| 名称 | 类型 | 描述 |
|---|---|---|
aText | const String | 要作为 WebSocket 文本帧发送到服务器的文本载荷。 |
aTimeout | const Integer | 等待服务器响应的最长时间(毫秒)。默认为 10000(10 秒)。 |
从服务器接收到的文本消息,或当超时、无可用连接或发生错误时的空字符串。(string)
WriteAndWaitData 是一个便捷辅助方法,用于通过 WebSocket 进行请求/响应式交换。它发送文本帧,然后在内部事件上阻塞调用线程,直到下一条来自服务器的文本消息到达或超时触发。由于它会阻塞,因此除非使用较短的超时时间,否则不应从主 UI 线程调用。当客户端未连接或服务器未及时回复时,返回空字符串;套接字级别的异常被捕获并转发到 OnError。当需要发送和接收二进制有效载荷时,请使用流重载。
vReply := oClient.WriteAndWaitData('ping', 5000);
if vReply <> '' then
ShowMessage(vReply);
function WriteAndWaitData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone; const aTimeout: Integer = 10000) : TStream;
| 名称 | 类型 | 描述 |
|---|---|---|
aStream | const TStream | 将作为 WebSocket 二进制帧发送的内容的源流。调用方保留流的所有权。 |
aSize | const Integer | 可选的片段大小(字节);当大于零时,传出流将被分割为多个此大小的片段。使用 0(默认值)以单个帧发送整个流。 |
aStreaming | const TwsStreaming | 分片传输的流模式(stmNone、stmStart、stmContinue、stmFinish)。默认为 stmNone,发送完整的独立消息。 |
aTimeout | const Integer | 等待服务器响应的最长时间(毫秒)。默认为 10000(10 秒)。 |
从服务器接收到的二进制消息的新分配流,如果超时、没有可用连接或发生错误则为 nil。调用方负责释放返回的流。(TStream)
此重载是文本重载(另一个重载)的二进制对应版本。它将提供的流作为二进制帧写入,然后在内部事件上阻塞调用线程,直到从服务器收到下一条二进制消息或超时触发。由于会阻塞,请避免在主 UI 线程上使用较长超时调用它。当客户端未连接或服务器未在时限内回复时返回值为 nil;异常被捕获并转发到 OnError。请在使用完成后释放源流(调用后)和返回的流。
oRequest := TMemoryStream.Create;
try
oRequest.LoadFromFile('request.bin');
oReply := oClient.WriteAndWaitData(oRequest, 0, stmNone, 5000);
try
if Assigned(oReply) then
oReply.SaveToFile('reply.bin');
finally
oReply.Free;
end;
finally
oRequest.Free;
end;