TsgcWebSocketClient › Methods › WriteAndWaitData
텍스트 메시지를 보내고 서버가 텍스트 메시지로 응답하거나 시간 초과가 경과할 때까지 호출자를 차단합니다.
function WriteAndWaitData(const aText: String; const aTimeout: Integer = 10000): string;
| Name | Type | 설명 |
|---|---|---|
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;
| Name | Type | 설명 |
|---|---|---|
aStream | const TStream | 내용이 WebSocket 바이너리 프레임으로 전송될 소스 스트림입니다. 호출자는 스트림의 소유자로 남습니다. |
aSize | const Integer | 선택적 조각 크기(바이트)입니다. 0보다 큰 경우 나가는 스트림이 이 크기의 여러 조각으로 분할됩니다. 전체 스트림을 단일 프레임으로 보내려면 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;