Indy의 TCPServer 컴포넌트를 써서 Client로부터 데이타를
LeadLn으로 수신합니다
그런데 앞부분 1-2라인이 짤려 읽지 못하고 2-3번째 라인부터 읽힙니다
그 이유와 해결책을 알고 싶습니다
급하므로 빨리 답변주시면 감사하겟습니다
Client에서 데이타를 보내는 쪽에서 데이타를 간헐적으로
보내는데 데이타송신 속도가 아주 빨라서 수신처리를 못해
데이타가 깨져서 그럴거라고 합니다
다른 컴포넌트는 필요없습니다
오직 Indy의 TCPServer 컴포넌트를 써야합니다
컴포넌트의 프로퍼티 값을 조절해야하나요?
델파이버젼은 5.0이며 Indy버젼은 8_00_21입니다
버젼의 문제일수 있나요?
다음은 소스 내용입니다
procedure TMainForm.IdTCPServer1Execute(AThread: TIdPeerThread);
var
DataBuf: String;
begin
with AThread.Connection do
begin
try
DataBuf := (ReadLn);
Memo1.Lines.Add(DataBuf);
finally
disconnect //이 부분을 넣으나 안넣으나 마찬가지인데
//오히려 넣으면 더 심합니다
end;
end;
end;
var DataString : String;
procedure DataProcess;
begin
Memo1.Lines.Add(DataString);
end;
procedure TMainForm.IdTCPServer1Execute(AThread: TIdPeerThread);
var
DataBuf: String;
begin
while AThread.Connection.Connected and not AThread.Terminated do
with AThread.Connection do
begin
try
DataBuf := (ReadLn);
DataString := DataBuf;
Synchronize(DataProcess);
end;
end;
문장이 맞는줄 모르겠지만,, 일단 Indy를 쓰는경우 Thread내에서의 처리를 싱크로나이즈를 이용한다는것과 더 좋게 쓰신다면 다중쓰레드의 유의점을 생각하시면서 짜시는게 나을것같습니다.. 데이터를 안받는지 아님 받았는데 안되는지는 실제 수신측에서 패킷 캡쳐같은 툴을 쓰시면 실제 어디까지 데이터가 오고 막히는건지에 정확한 진단을 하는것도 좋을것 같구요.. 단순히 너무 빨라서 안된다는것은 추측에 불과할 수도 있습니다.. 전송의 자료 보존을 기본으로 프로토콜임에도 만약 그런다면 큰 문제가 아닐 수 없습니다..
잘 되겠죠..
행복하셔야해요...
사랑해요...(H정유사의 모 CF중....)
엽기적이죠..???
즐프하세여...