서버측에서 클라이언트가 하나라도 연결되면 non-blocking 으로 무진장 보낸다는 가정.
서버
폼에는 TIdTCPServer 가 하나 올라가 있음.
procedure TfrmServer.IdTCPServer1Execute(AContext: TIdContext);
var
mStream: TMemoryStream;
begin
if AContext.Connection.Connected then begin
mStream:=TMemoryStream.Create;
try
// 여기서 mStream 에 뭔가를 Write 했다고 가정
... ...
try
AContext.Connection.IOHandler.Write(mStream, 0, True);
except on E:Exception do
OutputDebugString(PChar('[Server Error] '+E.Message));
end;
finally
FreeAndNil(mStream);
end;
end;
end;
클라이언트
폼에는 TIdTCPClient 가 하나 올라가 있고 연결하는 부분은 생략.
그리고 Recv 는 TTimer 를 이용해 0.1 초에 한 번씩 하고 있다고 가정.
procedure TfrmClient.tmrRecvTimer(Sender: TObject);
var
mStream: TMemoryStream;
begin
// 연결되어 있지 않다면 빠져나감. 재연결을 해도 좋고.
if not IdTCPClient1.Connected then Exit;
mStream:=TMemoryStream.Create;
try
if IdTCPClient1.IOHandler.Readable then begin
try
IdTCPClient1.IOHandler.ReadStream(mStream, -1, False);
except on E:Exception do
OutputDebugString(PChar('[ReadStreamError] - '+E.Message));
end;
try
IdTCPClient1.IOHandler.ReadStream(mStream, -1, False);
except on E:Exception do
OutputDebugString(PChar('[ReadStreamError] - '+E.Message));
end;
OutputDebugString(PChar(Format('[Recv] : %d Bytes', [mStream.Size])));
// 이제 받아온 Stream 으로 뭔가 하면 됨...
mStream.Position:=0;
end;
mStream.Position:=0;
end;
finally
FreeAndNil(mStream);
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] WM_COPYDATA 로 통신하기 (0) | 2009.04.18 |
---|---|
[Delphi] Indy10 - TIdTCPServer 를 이용해 원하는 클라이언트에 원하는 타이밍에 Send 하기 (0) | 2009.04.18 |
간단한 키보드 훅 (0) | 2009.04.18 |
자신의 ip 알아내기 (0) | 2009.04.18 |
[Delphi] 문자열 반복처리시 성능향상법 (0) | 2009.04.18 |