|
수신부에 코딩을 잘못 하셨네요
buf에 데이타를 받아와서 new 한 TFileInfo 복사하는것이아니라
buf의 포인터만 저장했네요
그러므로 TFileInfo에는
모두다 &buf[0] 의 정보를 가지고 있겠죠?
수신할때는 막 수신한것을 바로 뿌려주니까 괜찮지만
다 수신한후 다시 뿌려주면 모두다 같은 buf에서 데이타를 가져오니까
똑같은것 입니다.
TList문제가 전혀 아니죠
수신부에서
info = (TFileInfo*)buf; 이부분을
memcpy(info,buf,sizeof(info); 뭐 이런식으로 수정하시면 됩니다.
//--------------------------------------------------------------------
// 수신부
//--------------------------------------------------------------------
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);
}
//-------------------------
newhuni 님이 쓰신 글 :
: 서버와 클라이언트와 소켓통신을 하는 프로그램을 짜고있습니다.
: 아래 소스는 서버에서 보내준 파일정보 구조체를 클라이언트측에서 저장하는 루틴입니다.
:
: //--------------------------------------------------------------------
: // 선언부
: //--------------------------------------------------------------------
: 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
:
: 어째서 이렇게 나타나는지 아무리 생각해도 답이 안나옵니다....
: 부족한 저에게 조언부탁드립니다. ㅠㅠ
|