C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[47046] Re:Re:아.. 맞다.. 이런... ^^; 조언감사합니다... 잘됩니다.^^ (냉무)
newhuni [] 994 읽음    2006-11-10 17:05
수정 : memcpy(info,buf,sizeof(TFileInfo);

장성호 님이 쓰신 글 :
: 수신부에 코딩을 잘못 하셨네요
: 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
: :
: : 어째서 이렇게 나타나는지 아무리 생각해도 답이 안나옵니다....
: : 부족한 저에게 조언부탁드립니다. ㅠㅠ

+ -

관련 글 리스트
47044 TList의 사용에서 질문드립니다... newhuni 1265 2006/11/10
47045     Re:TList의 사용에서 질문드립니다... 장성호 1100 2006/11/10
47046         Re:Re:아.. 맞다.. 이런... ^^; 조언감사합니다... 잘됩니다.^^ (냉무) newhuni 994 2006/11/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.