C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

메신저 프로젝트
[291] 메신저 서버...
정재필 [] 27912 읽음    2005-01-20 12:00
MessengerMsg.h 1.7KB 서버와 통신을 위한 프로토콜
받아보시면 아시겠지만 현재 LoginReq 메시지를 보내면 LoginAns가 돌아오고,
무조건 로그인 성공으로 처리되게 해놨습니다. 즉 서버는 요청을 처리하지 않고
그냥 성공했다고 클라이언트에게 메시지를 보내도록 되어있다는 것이죠.

그리고 아직 보안에 관련된 인증 기능도 들어있지 않습니다.
일단은 이 껍데기 서버와 통신하면서 클라이언트를 작성해주시면 될거 같구요...

서버와 통신 가능한 메시지의 종류로는 LoginReq, LogoutReq, KeepAliveSignal이
있습니다. 여기서 KeepAliveSignal을 제외한 LoginReq, LogoutReq는 모두 Ans가
클라이언트 쪽으로 전송됩니다.

일단은 제가 만든 프로토콜 컴파일러를 이용했는데요, 템플릿을 좀 많이 사용하다보니
빌더에서는 사용하기가 좀 힘듭니다. 그래서 호환 가능한 C++ 구조체를 작성해서
이 글에 첨부해 드립니다.

string, list, map 등 STL 컨테이너에 저장된 자료들을 네트워크로 송수신하기 위해서는
프로토콜 컴파일러가 있는 것이 훨씬 편리한데요... 이 부분에 있어서는 좀 더 여유를
가지고 고민을 해봐야 할거 같습니다. (컴파일러가 빌더를 지원하는 쪽으로...)

그리고 예전에도 말씀드렸다시피 모든 16~64비트 자료형은 big-endian으로 변환하신
후에 서버로 전송하셔야하고 마찬가지로 서버에서 받은 모든 데이터는 big-endian이므로
little-endian으로 변환하셔야 합니다. Winsock에 있는 htons, htonl 등의 함수를 쓰셔도
무방하지만 자료형에 제한이 있으므로 제가 사용 중인 일반화된 함수를 사용하시면 될겁니다.

template<typename T>
inline T HostToNetwork(T src)
{
    register int i = 0;
    register int j = sizeof(T) - 1;
    T Result = src;

    while (i < j)
    {
        std::swap(reinterpret_cast<char *>(&Result)[i], reinterpret_cast<char *>(&Result)[j]);
        ++i;
        --j;
    }

    return Result;
}

template<typename T>
inline T NetworkToHost(T src)
{
    return HostToNetwork(src);
}

일단 서버와 통신이 성공하면 본격적으로 시작하도록 하죠 ^^

ps. 서버 바이너리는 디버그 버전과 릴리즈 버전이 두 개 다 포함되어 있는데요
       MessengerServer.exe는 릴리즈, MessengerServerD.exe는 디버그 버전입니다.
       두 버전의 차이는 assert의 차이밖에 없습니다. 가급적 디버그 버전으로 개발해주세요.
       그래야 서버와 클라이언트 간의 프로토콜이 안 맞는 경우 서버가 경고를 띄우게 되어
       바로 확인할 수 있습니다. 서버 바이너리는 일단은 메신저로 보내드리도록 하겠습니다.
       msn: zgdr7th@hotmail.com을 등록해주세요.

+ -

관련 글 리스트
291 메신저 서버... 정재필 27912 2005/01/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.