#define GM_REGREQ         0x00
#define GM_REGREP          0x01
#define GM_UNREGREQ 0x02
#define GM_UNREGREP 0x03
#define GM_ECHOREQ          0x04
#define GM_ECHOREP          0x05
#define GM_DATA 0x06
#define GM_UDATA          0x07
#define GM_UDATAREP 0x08typedef struct {
    uint8_t gm_ver;        //typedef unsigned char uint8_t;
    uint8_t gm_type;
    uint16_t gm_len;       //typedef unsigned short uint16_t;
    uint16_t gm_res;
    uint16_t gm_checksum;
    uint8_t gm_pdu[1];
} gm_packet;
........
udpfd = socket(AF_INET, SOCK_DGRAM, 0);    //1、创建 memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family      = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port        = htons(SERV_PORT); bind(udpfd, (SA *) &servaddr, sizeof(servaddr));  //2、绑定
......
recvfrom(udpfd, mesg, MAXLINE, 0, (SA *) &cliaddr, &len);
svr_recv(mesg, n, udpfd, (SA *) &cliaddr, len);
......void svr_recv(char *data, int len, int sockfd, SA *clntaddr, int clnt_len)
{
         gm_packet *pkt;
pkt = (gm_packet*)data;
switch(pkt->gm_type){
             case GM_REGREQ:
                  ....
                 break;
             case GM_UNREGREQ:
                  ....
                 break;
             case GM_ECHOREP:
                  ....
                 break;
             case GM_UDATA:
                  ....
                 break;
             case GM_UDATAREP:
                  ....
                 break;
             default: /* Error */
        sendto(sockfd, "yes", 3, 0, clntaddr, clnt_len);
        break;
    }
}我的问题是:
#define GM_REGREQ         0x00
#define GM_REGREP          0x01
#define GM_UNREGREQ 0x02
#define GM_UNREGREP 0x03
#define GM_ECHOREQ          0x04
#define GM_ECHOREP          0x05
#define GM_DATA 0x06
#define GM_UDATA          0x07
#define GM_UDATAREP 0x08
他们是在此处是什么意思? 为什么取0x00...0x08? 有什么约定?