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
[16905] Re:[질문]소켓으로 구조체 받기
gongnim [gongnim] 2106 읽음    2002-03-27 18:07
님의 소스를 보는순간 이럴수가 하는 생각이 번득 드는군요.
우선

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 1023 2002/03/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.