|
서버와 클라이언트와 소켓통신을 하는 프로그램을 짜고있습니다.
아래 소스는 서버에서 보내준 파일정보 구조체를 클라이언트측에서 저장하는 루틴입니다.
//--------------------------------------------------------------------
// 선언부
//--------------------------------------------------------------------
TFileInfo *info; // 수신되는 파일정보 구조체
TList *pFileList = new TList; // 구조체를 저장할 TList
char buf[144] = {0,}
//--------------------------------------------------------------------
// 수신부
//--------------------------------------------------------------------
// 서버로부터 구조체를 받아 info에 저장한 후 TList타입의 pFileList에 저장합니다.
for(int i=0;i<5;i++){
info = new TFileInfo;
IdTCPClient1->ReadBuffer(buf,sizeof(TFileInfo));
info = (TFileInfo*)buf;
richMessageBox->Lines->Add(info->FileName); // 이상없이 값이 출력됨.
pFileList->Add(info);
}
richMessageBox->Lines->Add("----------------------");
//--------------------------------------------------------------------
// pFileList에 저장된 아이템을 불러와 리치에디터 박스에 출력합니다.
for(int i=0;i<pFileList->Count;i++){
info = (TFileInfo*)pFileList->Items[i];
richMessageBox->Lines->Add(info->FileName); // 마지막에 저장된 데이타로만 출력됨.
}
//--------------------------------------------------------------------
이 코드를 돌려보면 서버측에서 전송받은 구조체를 TList에 저장하는 루틴에서는
각 구조체의 정보가 올바르게 나타납니다.
그런데 저장하는 루틴이 끝나고 TList에 저장된 아이템을 불러와서 화면에 출력하면
TList에 저장된 구조체정보가 나타나지 않고 맨 마지막에 저장된 구조체의 정보가
나타납니다.
실행 출력값
a.exe
b.exe
c.exe
d.exe
e.exe
----------------------
e.exe
e.exe
e.exe
e.exe
e.exe
어째서 이렇게 나타나는지 아무리 생각해도 답이 안나옵니다....
부족한 저에게 조언부탁드립니다. ㅠㅠ
|