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
[11502] [질문] 인디소켓에서 패킷 전송시 조각나는 현상
박정만 [] 892 읽음    2001-09-27 11:40
TCP/IP 통신에서 패킷이 한번에 안가고 조각나서 전송되는 일이 다반사라고 들었는데,

인디소켓에서도 그러한 경우가 있습니까?

아래처럼 채팅 메세지를 전송할 경우에 애매한 경우가...

typedef struct
{
    BYTE  Cmd;
    BYTE  ChatSize;
} SEND_CHATMSG;

SEND_CHATMSG   SendMsg;

Cmd = CMD_CHATMSG;
ChatSize = Edit_Box->Text.Length();

Connection->WriteBuffer((void *)&SendMsg, sizeof(SEND_CHATMSG));
Connection->WriteBuffer((void *)Edit_Box->Text.c_str(), SendMsg.ChatSize);

이렇게 서버에서 클라이언트로 보낸다고 가정할때.. (즉석에서 친거라 문법이 맞는진 모르겠지만.. ^^)
클라이언트는 아래처럼 받습니다.

typedef struct
{
    BYTE ChatSize;
} RECV_CHATMSG;

RECV_CHATMSG  RecvMsg;
char ChatMsg[256];

Socket->ReadBuffer((void *)&Cmd, 1);
if(Cmd == CMD_CHATMSG)
{
    Socket->ReadBuffer((void *)&RecvMsg, sizeof(RECV_CHATMSG)); // 채팅 문자열 정보 받음.

    try
    {  
        Socket->Readbuffer((void *)ChatMsg, RecvMsg.ChatSize); // 채팅 문자열 받음.
    }
    catch(...)
    {
        return false;
        // 차후에 윗줄의 ReadBuffer가 성공할 때까지 재시도
    }
}

이때, 버퍼에 쌓인 메세지의 크기가 패킷보다 작으면 catch()로 넘어가나요?
그래서, 성공할때까지 위 작업을 반복하는게 맞는 것인지 알고 싶습니다.

듣기로는 서버에서 보낸 패킷 자체가 아예 분실되어서, 클라이언트로 안가는 경우도 있다고 들었는데, 이 경우에는 어떻게 처리해야 좋을지 모르겠네요..

도움 부탁드립니다.

+ -

관련 글 리스트
11502 [질문] 인디소켓에서 패킷 전송시 조각나는 현상 박정만 892 2001/09/27
11528     Re:[질문] 인디소켓에서 패킷 전송시 조각나는 현상 최보현.U&I 1562 2001/09/28
11510     Re:[질문] 인디소켓에서 패킷 전송시 조각나는 현상 xen 1074 2001/09/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.