|
//클라이언트 -- 구조체 보내기
PMyRec rec = new TMyRec;
int leng = 0;
int idx = 0;
strcpy(rec->FName, "FileName뭘까요?");
leng += sizeof(rec->FName);
strcpy(rec->LName, "FileLength길이 ");
leng += sizeof(rec->LName);
byte * Buff = new byte[leng+3];
memcpy(Buff, "UID", 3); idx += 3;
memcpy(Buff+idx, rec, sizeof(*rec));
ClientSocket1->Socket->SendBuf(Buff, leng+3);
delete[] Buff;
//-->이렇게 바꾸세요.
시간한줌 님이 쓰신 글 :
: 안녕하세요~
: 시간한줌입니다.
: 아까 질문한것에 조금 서광이 비쳐서 다시 질문을 수정합니다.
:
: 소켓 통신으로 구조체를 받으려고 하는데 구조체를 여러개를 두려고 합니다. 그래서 앞에 구조체를 구분할 수 있는 해더 내용을 담았습니다.
:
:
: // 서버와 클라이언트의 해더파일 내용
: typedef struct MyRec
: {
: char FName[255];
: char LName[127];
: } TMyRec;
: typedef TMyRec* PMyRec;
: //---------------------------------------------------------------------------
:
: // 클라이언트
: // 구조체 보내기
: PMyRec rec = new TMyRec;
: int leng=0;
:
: strcpy(rec->FName,"FileName뭘까요?");
: leng += sizeof(rec->FName);
:
: strcpy(rec->LName, "FileLength길이 ");
: leng += sizeof(rec->LName);
:
: byte * Buff = new byte[leng+3];
: strcpy(Buff, "UID");
: strcat(Buff,(byte *)rec);// 여기서 문제가 난듯 하기두 하고요 ㅡㅡ;;;
:
: ClientSocket1->Socket->SendBuf(Buff, leng+3);
: delete [] Buff;
: //---------------------------------------------------------------------------
:
:
: //서버 부분
: char * Buff = new char[3];
: Memo1->Lines->Add("받은 버퍼 크기 : " + IntToStr(Socket->ReceiveLength()));
:
: Socket->ReceiveBuf(Buff, 3);
: AnsiString str = Buff;
: delete [] Buff;
: Memo1->Lines->Add("짤린 버퍼 크기 : " + IntToStr(Socket->ReceiveLength()));
:
: if( str == "UID" )
: {
: PMyRec temp = new TMyRec;
: memset(temp, 0x00, sizeof(temp));
: Socket->ReceiveBuf(temp, Socket->ReceiveLength() );
: Memo1->Lines->Add(temp->FName);
: Memo1->Lines->Add(temp->LName);
: }
: //---------------------------------------------------------------------------
:
: 이렇게 했더니~
:
: 받은 버퍼 크기 : 512
: 짤린 버퍼 크기 : 509
: FileName뭘까요?
:
: 받은 버퍼 크기 : 0
: 짤린 버퍼 크기 : 0
:
:
: 이런 결과가 나옵니다.
: 왜? 두번씩이나 읽고 첫번째 구조체 값인 FName만 제대로 읽는 거에요?
: 웅~ 이거땜에 오늘 하루종일 고생이네요~
: 좀 해결해 주세요~ ^^
|