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
[16933] Re:Re:옷..감사 합니다...^^ 내일 곧 실험해 보겠습니다.~~[냉면먹으러감]
AyanamiRei [] 1022 읽음    2002-03-27 23:06
gongnim 님이 쓰신 글 :
: 님의 소스를 보는순간 이럴수가 하는 생각이 번득 드는군요.
: 우선
:
: typedef struct MyRec
: {
:    AnsiString FName, LName;

: } TMyRec;
: 여기서 AnsiString 은 char*하고 비슷합니다.(물론 내용상으로 전혀 다르지만, 표현하자면 그렇죠)
: AnsiString 은 그 자체가 클래스입니다. 그래서 AnsiString으로 선언된것은 크기가 4바이트밖에 안됩니다. 왜냐구요? 왜냐하면 스트링배열은 정적으로 지정하지만, AnsiString은 크기가 수시로 변하기 때문에 포인터 크기밖에 안됍니다.
: 그래서 마지막에 ss->Socket->Connections[0]->SendBuf(temp,sizeof(temp)); 이렇게 선언한 부분에서 sizeof(temp)하면 님께서 만든 스트링의 값하고는 전혀 다르겠죠.
: 따라서 구조체를 사용하시려면 AnsiString을 사용하지 마시고 스트링 배열로 만드시기 바랍니다.
: 그러면 문제없이 소켓전송이 되겠죠.
:
: 그리고 두번째 문제가 있는데 코드에 new로 선언만 했지, delete 가 없네요.
: 이러면 안됩니다. 우선 일반적인 변수들은 해당 함수를 벗어나면 free가 돼지만 new로 선언된것은
: heap 영역에 들어가기 때문에 free가 돼지 않습니다. 따라서 님께서 만든 데로 하면 메모리 누수현상이 생겨서 언젠가는 메모리 부족현상이 일어날 것입니다.
: 그럼 즐프하세요.
:
:       --- Change World ---
:
:
:
: AyanamiRei 님이 쓰신 글 :
: : 소켓으로 구조체를 주고 받으려고 하는데요.
: : 보낼때 에러 나는것도 아니고
: : 받을때 에러 나는것도 아닌데..값이 제대로 안들어 오네여..
: :
: :
: : 서버쪽에서 이렇게 보내구요..
: : typedef struct MyRec
: : {
: :   AnsiString FName, LName;
: :
: : } TMyRec;
: : typedef TMyRec* PMyRec;
: :
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: : PMyRec temp;
: : temp = new TMyRec;
: : temp->FName ="test1";
: : temp->LName = "test2";
: : ss->Socket->Connections[0]->SendBuf(temp,sizeof(temp));        //ss는 서버소켓입니다.
: : }
: :
: : //////////////////////////////////////////////////////////////////////////
: : //클라이언트쪽은 다음과 같이 받았습니다.
: :
: :
: : void __fastcall TForm1::csRead(TObject *Sender, TCustomWinSocket *Socket)
: : {                      //cs는 클라이언트소켓입니다.
: : PMyRec temp;
: : temp = new TMyRec;
: : Socket->ReceiveBuf(temp,Socket->ReceiveLength());
: : ShowMessage(temp->FName);
: : ShowMessage(temp->LName);
: : }
: :
: : ////////////////////////////////////////////////////////////////////////
: :
: : 왜 안되는지....ㅡ.ㅜ
: : 도움좀 주세요...
: :
: :
: : 방금 다시 테스트 해본결과..
: : 구조체의 스트링을 int로 바꾸니까 잘 갑니다.
: : 구조체에 스트링을 넣으면 그 정확한 크기를 알수 없어서
: : 제대로 전송은 못하는것 같습니다..ㅜ.ㅜ
: : 어떻게 방법이 없는지요..
: : 오늘 하루 종이 이거 잡고 끙끙 거리고 있습니다..
: : 도움의 손길을..^^
: :

+ -

관련 글 리스트
16901 [질문]소켓으로 구조체 받기 AyanamiRei 1119 2002/03/27
16939     Re:[질문]소켓으로 구조체 받기 이경문 1445 2002/03/28
16905     Re:[질문]소켓으로 구조체 받기 gongnim 2106 2002/03/27
16933         Re:Re:옷..감사 합니다...^^ 내일 곧 실험해 보겠습니다.~~[냉면먹으러감] AyanamiRei 1022 2002/03/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.