Indy9 에서는 WriteBuffer 로 때려박으면 되었지만, Indy10 에서는 WriteBuffer 라는 함수 자체가 사라졌음.
하는 방법은 구조체를 TIdBytes로 변환해서 보내고, 받을 때는 TIdBytes를 다시 원하는 형태로 변환해서 처리하는 것.
아래 예제는 TIdTCPClient -> TIdTCPServer 형식.
보내기
procedure TfrmClient.ButtonSendClick(Sender: TObject);
var
Buffer: TIdBytes;
MyRecord: TMyRecord;
begin
if IdTCPClient1.Connected then begin
// MyRecord 에 뭔가 세팅하는 부분...
Buffer:=RawToBytes(MyRecord, SizeOf(TMyRecord));
IdTCPClient1.IOHandler.Write(Buffer);
end;
end;
받기
procedure TfrmServer.IdTCPServer1Execute(AContext: TIdContext);
var
Buffer: TIdBytes;
MyRecord: TMyRecord;
begin
// if 체크하는 부분에서 접속여부와 함께 and 로
// AContext.Connection.IOHandler.Readable 을 넣는 것도 좋으나
// 완전 빠른 Non-blocking 으로 돌리고자 하면 없는 게 좋다는 생각
// 대신 Recv 해서 변환한 구조체의 무결성을 체크하는 방법을 사용하는 게 더 좋지 않을까
if AContext.Connection.Connected then begin
ZeroMemory(@MyRecord, SizeOf(TMyRecord));
AContext.Connection.IOHandler.ReadBytes(Buffer, SizeOf(TMyRecord), False);
BytesToRaw(Buffer, MyRecord, SizeOf(TMyRecord));
// 받아온 MyRecord 로 뭔가 하는 부분...
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] 현재 IMM 상태 (한글/영문) 체크, 변경 (0) | 2009.04.18 |
---|---|
[Delphi] 커서 포함 화면캡쳐 (0) | 2009.04.18 |
[Delphi] WM_COPYDATA 로 통신하기 (0) | 2009.04.18 |
[Delphi] Indy10 - TIdTCPServer 를 이용해 원하는 클라이언트에 원하는 타이밍에 Send 하기 (0) | 2009.04.18 |
[Delphi] Indy10 을 이용한 Stream 전송 (TCP/IP) (0) | 2009.04.18 |