제가 프로토콜쪽의 소스 분석을 받았습니다. 그런데 제가 아직 초보라 잘 모르겠습니다. 소스는 아래에 첨부했구요. 제가 원하는 답변은 이 소스를 분석하려면 어떤 것을 알아야 하는 지 입니다. 모 여러 답변 주셔도 감사하겠습니다. 어떤 사이트를 봐라라 던지, 이 책을 봐라라 던지, 자바에 어떤 책에 어떤 내용을 봐라라고 구체적으로 말씀을 해주시다던지, 어떤 답변이든지 다 좋습니다^^ 꼭 부탁드릴게여^^

-===================================================소스============================================

//*
 * protocol.h
 *
 *  Created on: Mar 23, 2011
 *      Author: ving
 */

#ifndef PROTOCOL_H_
#define PROTOCOL_H_

//*TCP Hole Punching Protocol

//1) Command List
/////ES = Echo Server
/////RS = Rendezvous Server
/////VB = Ving Box
/////VP = Ving Player

const UINT16 CMD_VB_RS_JOIN_REQ    = 0x01;
const UINT16 CMD_RS_VB_JOIN_RES    = 0x02;
const UINT16 CMD_VB_RS_HOLE_PUNCH_TEST_REQ = 0x03;
const UINT16 CMD_RS_VB_HOLE_PUNCH_TEST_RES = 0x04;

const UINT16 CMD_VP_RS_JOIN_REQ    = 0x11;
const UINT16 CMD_RS_VP_JOIN_RES    = 0x12;

const UINT16 CMD_VP_RS_MEETING_REQ   = 0x21;
const UINT16 CMD_RS_VB_MEETING_READY  = 0x22;
const UINT16 CMD_VB_RS_MEETING_OPEN   = 0x23;
const UINT16 CMD_RS_VP_MEETING_RES   = 0x24;
const UINT16 CMD_VP_RS_MEETING_RESYN_REQ = 0x25;
const UINT16 CMD_RS_VB_MEETING_RESYN_READY = 0x26;

const UINT16 CMD_VB_ES_JOIN_REQ    = 0x31;
const UINT16 CMD_ES_VB_JOIN_RES    = 0x32;

const UINT16 CMD_VP_ES_JOIN_REQ    = 0x41;
const UINT16 CMD_ES_VP_JOIN_RES    = 0x42;

///////////////////////////////////////////////////////

//2) Packet List

typedef union _JOINER_ID
{
 UINT64  nId;
 BYTE  Id[8];
} __attribute__((__packed__)) JOINER_ID, *PJOINER_ID;

typedef struct _PKT_RS_JOIN_REQ //20byte
{
 JOINER_ID JoinerId; // VBId or VPId
 UINT32  nJoinerConnType;
 UINT32  saLocalIP;
 UINT16  nLocalListenPort;
 UINT16  nRouterPort; // UPNP/Port_Foreward
} __attribute__((__packed__)) PKT_RS_JOIN_REQ, *PPKT_RS_JOIN_REQ;

typedef struct _PKT_RS_JOIN_RES //20byte
{
 JOINER_ID JoinerId; // VBId or VPId
 UINT32  nJoinerConnType;// Public/NAT_UPNP/NAT_PORT_FORWARD
        // Public_Disable/NAT_UPNP_Disable/NAT_PORT_FORWARD_Disable/NAT_Disable
 UINT32  saJoinerPublicIP;
 UINT32  reserved;
} __attribute__((__packed__)) PKT_RS_JOIN_RES, *PPKT_RS_JOIN_RES;

typedef struct _PKT_VB_RS_HOLE_PUNCH_TEST_REQ //20byte
{
 JOINER_ID VBId;
 UINT32  nVBConnType; // NAT_UPNP_Disable/NAT_PORT_FORWARD_Disable/NAT_Disable
 UINT32   saVBPublicIP;
 UINT16  nVBPublicPort;
 UINT16  reserved;
} __attribute__((__packed__)) PKT_VB_RS_HOLE_PUNCH_TEST_REQ, *PPKT_VB_RS_HOLE_PUNCH_TEST_REQ;

typedef struct _PKT_RS_VB_HOLE_PUNCH_TEST_RES //20byte
{
 JOINER_ID VBId;
 UINT32  nVBConnType; // TCP_Hole_Punch/NAT_Disable
 UINT32  reserved1;
 UINT32  reserved2;
} __attribute__((__packed__)) PKT_RS_VB_HOLE_PUNCH_TEST_RES, *PPKT_RS_VB_HOLE_PUNCH_TEST_RES;

typedef struct _PKT_VP_RS_MEETING_REQ //20byte
{
 JOINER_ID VBId;
 UINT32  saVPPublicIP;
 UINT16  nVPPublicPort;
 UINT16  reserved1;
 UINT32  reserved2;
} __attribute__((__packed__)) PKT_VP_RS_MEETING_REQ, *PPKT_VP_RS_MEETING_REQ;

typedef struct _PKT_RS_VB_MEETING_READY //20byte
{
 JOINER_ID VPId;
 UINT32  saVPPublicIP;
 UINT16  nVPPublicPort;
 UINT16  reserved1;
 UINT32  reserved2;
} __attribute__((__packed__)) PKT_RS_VB_MEETING_READY, *PPKT_RS_VB_MEETING_READY;

typedef struct _PKT_VB_RS_MEETING_OPEN //20byte
{
 JOINER_ID VPId;
 UINT32  saVPPublicIP;
 UINT16  nVPPublicPort;
 UINT16  reserved1;
 UINT32  reserved2;
} __attribute__((__packed__)) PKT_VB_RS_MEETING_OPEN, *PPKT_VB_RS_MEETING_OPEN;

typedef struct _PKT_RS_VP_MEETING_RES //20byte
{
 JOINER_ID VBId;
 UINT32  saVPPublicIP;
 UINT16  nVPPublicPort;
 UINT16  reserved1;
 UINT32  reserved2;
} __attribute__((__packed__)) PKT_RS_VP_MEETING_RES, *PPKT_RS_VP_MEETING_RES;

typedef struct _PKT_ES_JOIN_REQ //20byte
{
 JOINER_ID JoinerId; // VBId or VPId
 UINT32  reserved1;
 UINT32  reserved2;
 UINT32  reserved3;
} __attribute__((__packed__)) PKT_ES_JOIN_REQ, *PPKT_ES_JOIN_REQ;

typedef struct _PKT_ES_JOIN_RES //20byte
{
 JOINER_ID JoinerId; // VBId or VPId
 UINT32  saJoinerPublicIP;
 UINT16  nJoinerPublicPort;
 UINT16  reserved1;
 UINT32  reserved2;
} __attribute__((__packed__)) PKT_ES_JOIN_RES,*PPKT_ES_JOIN_RES;

//3) Define
enum CONNECTION_TYPE
{
 CT_NONE = 0,
 CT_PUBLICIP,//1
 CT_NAT_UPNP,//2
 CT_NAT_PORT_FORWARD,//3
 CT_NAT_TCP_HOLE_PUNCHING,//4
};

enum CONNECTION_RESULT_TYPE
{
 CRT_PUBLICIP, //VP
 CRT_NAT, //VP
 CRT_NAT_TCP_HOLE_PUNCHING, //VB
 CRT_PUBLICIP_OK,
 CRT_PUBLICIP_DISABLE,
 CRT_NAT_OK,
 CRT_NAT_DISABLE,
 CRT_NAT_UPNP_OK,
 CRT_NAT_UPNP_DISABLE,
 CRT_NAT_PORT_FORWARD_OK,
 CRT_NAT_PORT_FORWARD_DISABLE,
 CRT_NAT_TCP_HOLE_PUNCHING_OK,
 CRT_NAT_TCP_HOLE_PUNCHING_DISABLE,
};

enum RESULT_TYPE
{
 RT_ACK = 1,
 RT_JOIN_DENY,
 RT_JOINER_NOT_EXIST,
};

typedef struct _CMD_PKT_ST //16byte
{
 UINT32 nSync;
 UINT32 nCommand;
 UINT32 nSeq;
 UINT16 nResultType;
 UINT16 nSize;
} __attribute__((__packed__)) CMD_PKT_ST, *PCMD_PKT_ST;

typedef union _DATA_PKT_UT
{
 PKT_RS_JOIN_REQ     rs_join_req;
 PKT_RS_JOIN_RES     rs_join_res;

 PKT_VB_RS_HOLE_PUNCH_TEST_REQ hptest_req;
 PKT_RS_VB_HOLE_PUNCH_TEST_RES hptest_res;

 PKT_VP_RS_MEETING_REQ   meet_req;
 PKT_RS_VB_MEETING_READY   meet_ready;
 PKT_VB_RS_MEETING_OPEN   meet_open;
 PKT_RS_VP_MEETING_RES   meet_res;

 PKT_ES_JOIN_REQ     es_join_req;
 PKT_ES_JOIN_RES     es_join_res;
} DATA_PKT_UT, *PDATA_PKT_UT;

typedef struct _PACKET_ST {
 CMD_PKT_ST cmd;  // 16
 DATA_PKT_UT data;  // data itself
} PACKET_ST, *PPACKET_ST;

class CCommCtx;
typedef struct _PROC_MSG_ST {
 PACKET_ST packet;  // 16
 int   sock;
 SADDR_IN remoteaddr;
 CCommCtx* pCommCtx;
} PROC_MSG_ST, *PPROC_MSG_ST;

#endif /* PROTOCOL_H_ */