TCP/IP 통신 초보입니다. 고수님들의 조언 부탁드려요.
서버에 접속하면 서버에서 메세지를 바로 던져주는데요,
그걸 받을때 readbuffer를 사용하려 합니다.
buffer size는 넉넉하게 잡았고요,
그런데, readbuffer에서 프로그램이 딱! 멈춰버립니다.
서버에서 보내주는 메세지 사이즈가 작아서 그런 것같은데요,
readbuffer(??, 2) 하고 사이즈를 작게 주면 2 char만 잘 읽어오는데
const로 설정한 값대로 다 읽어오면 멈추는 것같아요.
버퍼 크기는 고정이고,
서버에서 보내주는 메세지가 가변길이여서 그런 것같은데,
가변길이 데이타를 받을때는 어떻게 해야 하는 걸까요?
통신 초보라, 개념이 잘 잡히지 않습니다.
고수님들의 조언 부탁드립니다~!
const BufSize = 4096;
type
TransferRecord = Packed Record
Msg : array[0..Bufsize] of Char;
end;
.......
procedure TClientFrmMain.CBClientActiveClick(Sender: TObject);
var RecvRecord : TransferRecord ;
begin
if CBClientActive.Checked then
begin
try
Client.Connect;
Client.ReadBuffer(RecvRecord, sizeof(RecvRecord)); // 이렇게 하면 멈춥니다
// Client.ReadBuffer(RecvRecord, 2); // 이렇게 하면 안멈춥니다~
except
on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
end;
end
else
begin
Client.Disconnect;
end;
end;
Client.ReadBuffer(RecvRecord, sizeof(RecvRecord));
(RecvRecord) = 4096바이트를 읽을때까지 기다립니다.
주고받는 데이터가 문자열이라면 서버에서 보낼때 끝에 Carrage Return을 붙여서 보내고 읽을때 ReadBuffer대신에 ReadLn같은 걸로 읽어보세요.
문자열이 아니라면 서버에서 버퍼크기를 먼저 보내고 그다음 버퍼를 보내도록하시고, 읽을때도 버퍼크기만큼 읽으시면 될거같습니다.
TCP/IP 컴포넌트에 따라서 ReadLn같은 메소드 이름은 바뀔 수 있습니다.
^^ 항상 즐코하세요...