전체에서 Integer 4bytes만 복사 === 나머지 길이
전체에서 Integer 4bytes만 복사
5,6번째 자리 복사 하면 -===> 명령어 자리
전체에서 Integer 4bytes만 복사
LRESULT CChatClientDlg::OnSocketMsg( WPARAM wParam , LPARAM lParam ) { SOCKET sock = (SOCKET)wParam; //에러체크 int nError = WSAGETSELECTERROR( lParam ); if( 0 != nError ) { OutputMsg( "[에러] WSAGETSELECTERROR : %d ", nError ); m_AsyncSocket.CloseSocket( sock ); return false; } //이벤트 체크 int nEvent = WSAGETSELECTEVENT( lParam ); switch( nEvent ) { case FD_READ: { int nRecvLen = recv( sock , m_szSocketBuf + m_nRestRecvLen , MAX_SOCKBUF , 0 ); if( 0 == nRecvLen ) { OutputMsg("[CLOSE] 클라이언트와 연결이 종료 되었습니다."); m_AsyncSocket.CloseSocket( sock ); return false; } else if( -1 == nRecvLen ) { OutputMsg("[ERROR] recv 실패 : %d " , WSAGetLastError() ); m_AsyncSocket.CloseSocket( sock ); } m_nRestRecvLen += nRecvLen; //패킷길이의 크기보다 적게 들어왔다면 if( m_nRestRecvLen < 4 ) return true; //패킷의 길이를 얻어온다. int nMsgLen = 0; char* pCurrent = m_szSocketBuf; CopyMemory( &nMsgLen , pCurrent , 4 ); //하나의 완전한 패킷을 모두 받았다면.. while( nMsgLen >= m_nRestRecvLen ) { ProcessPacket( m_szSocketBuf , nMsgLen ); // nMsgLen -=m_nRestRecvLen; m_nRestRecvLen -= nMsgLen; if( m_nRestRecvLen <= 0 ) break; pCurrent += nMsgLen; CopyMemory( &nMsgLen , pCurrent , 4 ); } MoveMemory( m_szSocketBuf , pCurrent , m_nRestRecvLen ); break; } case FD_CLOSE: { OutputMsg("[CLOSE] 클라이언트 접속 종료 : SOCKET(%d)", sock ); m_AsyncSocket.CloseSocket( sock ); } break; } return true; }
5,6번째 자리 복사 하면 -===> 명령어 자리
::ProcessPacket( char* pRecvBuf , int nRecvLen ) { unsigned short usType; CopyMemory( &usType , pRecvBuf + 4 , 2 ); switch( usType ) { case PACKET_CHAT: { Packet_Chat* pChat = (Packet_Chat*)pRecvBuf; OutputMsg("[%d] : %s", pChat->s_sIndex , pChat->s_szChatMsg ); } break; case PACKET_MOVE: { OutputMsg("[Move]"); } break; default: OutputMsg("[ERROR] 정의되지 않은 메시지 도착"); break; } }
'온라인게임 > vc++' 카테고리의 다른 글
IO Completion Port (0) | 2010.10.06 |
---|---|
vs 2010 팁 ( visual studio 추가 설치 파일 ) (0) | 2010.10.05 |
숭실대학교 미디어대학원 컴퓨터그래픽스 Magic (0) | 2010.10.05 |
MFC 표기법 (0) | 2010.10.05 |
기능 (0) | 2010.10.05 |