TsgcTCPClient › 메서드 › WriteData

WriteData Method

원시 소켓을 통해 TCP 서버에 텍스트 또는 바이너리 메시지를 보냅니다.

Overloads

오버로드 1

구문

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

Parameters

NameType설명
aTextconst String서버에 보낼 텍스트 페이로드입니다. 바이트는 프레이밍 헤더 없이 TCP 소켓에 직접 작성됩니다.
aSizeconst Integer선택적 fragment 크기(바이트)입니다. 0보다 크면 페이로드가 이 크기의 여러 청크로 분할됩니다. 전체 페이로드를 단일 쓰기로 보내려면 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');

Overload 2

구문

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

Parameters

NameType설명
aStreamconst TStream내용이 원시 바이트로 소켓에 기록될 소스 스트림입니다. 호출자는 스트림의 소유자로 남습니다.
aSizeconst Integer선택적 조각 크기(바이트)입니다. 0보다 크면 스트림이 이 크기의 여러 청크로 분할됩니다. 전체 스트림을 단일 쓰기로 보내려면 0(기본값)을 사용하십시오.
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;

메서드로 돌아가기