서버와의 통신

/* 사용자지정 프로토콜 */
#define PROTOCOL_ZERO 0
#define PROTOCOL_KNOCK 1    // 똑똑
#define PROTOCOL_WHO 2      // 누구냐?
#define PROTOCOL_IAM 3      // 저는요
#define PROTOCOL_SO 4       // 그래서?
#define PROTOCOL_SPEAK 5    // 잡담
#define PROTOCOL_NOISY 6    // 시끄
#define PROTOCOL_BYE 7      // 이만가요

unsigned int rtn = 0, var_cnt = 0, var_type; /* 함수리턴값, 수신data내 변수 갯수, 변수타입*/
int num; // 송신 정수값

// 송신할 프로토콜 지정
zwSock.SetCmd(PROTOCOL_KNOCK);
// 송신
rtn = zwSock.Send(fd); 

printf("REQ : PROTOCOL_KNOCK\n");

while (1) {
    // 수신대기
    if ((rtn = zwSock.RecvAwait(fd)) < 0)
        break;

    // 수신Data Stream 내 변수 Count
    var_cnt = zwSock.GetVarCnt();

    // 애틀리케이션 프로토콜을 확인하여 대응한다
    switch (rtn) {
    case PROTOCOL_ZERO: {
        continue;
    }
    case PROTOCOL_WHO: {
        printf("REQ : PROTOCOL_IAM\n");
        // 송신할 프로토콜 지정
        zwSock.SetCmd(PROTOCOL_IAM);
        const char* msg = "My name is steelwater.";
        printf("Me : %s\n", msg);
        // 송신 문자열 추가
        zwSock.AddDataString(msg);
        zwSock.Send(fd);
        continue;
    }
    case PROTOCOL_SO: {
        printf("REQ : PROTOCOL_SPEAK\n");
        zwSock.SetCmd(PROTOCOL_SPEAK);
        zwSock.AddDataString("I am");
        num = 10;
        // 송신할 정수 추가
        zwSock.AddDataInt(num);
        // 갯수에 상관없이 Data 임의 추가
        zwSock.AddDataString("years old.");
        zwSock.AddDataString("nice to meet you");
        zwSock.AddDataString("how old are you?");
        printf("I am %d years old.\nnice to meet you\nhow old are you?\n", num);
        num = 12;
        zwSock.AddDataInt(num);
        zwSock.AddDataString("?");
        printf("%d ?\n", num);
        zwSock.Send(fd);
        continue;
    }
    case PROTOCOL_NOISY: {
        printf("REQ : PROTOCOL_BYE\n");
        zwSock.SetCmd(PROTOCOL_BYE);
        const char* msg = "Ok bye!";
        printf("Me : %s\n", msg);
        zwSock.AddDataString(msg);
        zwSock.Send(fd);

        break;
    }
    default: {
        continue;
    }
    }

    if (rtn == PROTOCOL_NOISY)
        break;
}

해당 코드의 개요

    • LibZWSock::SetCmd() 메소드로 프로토콜 지정
    • 서버와 약속된 프로토콜별 처리
    • 지정된 메소드로 송신할 임의의 Data를 추가한다
error: Content is protected !!
위로 스크롤