• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            測(cè)試網(wǎng)絡(luò)程序

            Posted on 2009-01-31 01:52 S.l.e!ep.¢% 閱讀(1382) 評(píng)論(0)  編輯 收藏 引用 所屬分類: test

            // ?網(wǎng)絡(luò)通信協(xié)議
            ////////////////////////////////////////////////////////////////////////////// //
            struct ?cmd
            {
            ????
            int ?nCmd;
            }
            ;

            #pragma?pack(
            1 )
            struct ?tagClientLogin
            {
            ????cmd??header;
            ????
            char ?username[ 20 ];
            ????
            char ?userpwd[ 20 ];
            }
            ;

            struct ?tagRepClientLogin
            {
            ????cmd??header;
            ????
            bool ?bLoginSuccess;
            }
            ;
            #pragma?pack(
            1 )

            #define ?NETWORK_CMD_LOGIN?1
            #define ?NETWORK_CMD_REP_LOGIN?2
            ////////////////////////////////////////////////////////////////////////////// //

            // ?接口定義
            ////////////////////////////////////////////////////////////////////////////// //
            class ?ClientObserver
            {
            public :
            ????ClientObserver()??
            {}
            ????
            ~ ClientObserver()? {}

            ????
            virtual ? void ?onRepLogin( bool ?bLoginSuccess)? = ? 0 ;
            }
            ;

            class ?INetWorkable
            {
            public :
            ????INetWorkable()?
            {}
            ????
            ~ INetWorkable()? {}

            ????
            // ?pvoid?:?欲發(fā)送的緩沖區(qū);?nSize?:?緩沖區(qū)的大小
            ???? virtual ? bool ?send( const ? void * ?pvoid,? int ?nSize)? = ? 0 ;

            ????
            // ?由網(wǎng)絡(luò)層調(diào)用,pvoid:?接收到的數(shù)據(jù)的緩沖區(qū),?nSize?:?緩沖區(qū)的大小;??返回已經(jīng)處理的數(shù)據(jù)長(zhǎng)度
            ???? virtual ? int ?onreceive( const ? void * ?pvoid,? int ?nSize)? = ? 0 ;
            }
            ;

            class ?ILogable
            {
            public :
            ????ILogable()?
            {}
            ????
            ~ ILogable()? {}

            ????
            virtual ? void ?log( const ? char * ?plog)? = ? 0 ;
            }
            ;
            ////////////////////////////////////////////////////////////////////////////// //

            // ?業(yè)務(wù)邏輯類
            ////////////////////////////////////////////////////////////////////////////// //
            class ?Client?:? public ?INetWorkable
            {
            public :
            ????Client();
            ????
            virtual ? ~ Client();

            ????
            void ?registerObserver(ClientObserver * ?p)? {?m_pClientObserver? = ?p;?}
            ????
            void ?removeObserver()? {?m_pClientObserver? = ?NULL;?}

            ????
            void ?setLoger(ILogable * ?p)? {?m_plog? = ?p;?}
            ????
            void ?removeLoger()????????? {?m_plog? = ?NULL;?}

            ????
            bool ?SendLogin( const ? char * ?name,? const ? char * ?pwd)
            ????
            {
            ????????tagClientLogin?login;
            ????????memset(
            & login,? 0 ,? sizeof (login));
            ????????login.header.nCmd?
            = ?NETWORK_CMD_LOGIN;
            ????????strncpy(login.username,?name,?
            sizeof (login.username));????????
            ????????strncpy(login.userpwd,?pwd,?
            sizeof (login.userpwd));
            ????????
            return ?send( & login,? sizeof (login));
            ????}


            protected :
            ????
            virtual ? bool ?send( const ? void * ?pvoid,? int ?nSize)
            ????
            {
            ????????cout?
            << ? " Client?socket?send?size?=? " ? << ?nSize? << ?endl;
            ????????
            return ? true ;
            ????}

            ????
            ????
            virtual ? int ?onreceive( const ? void * ?pvoid,? int ?nSize)
            ????
            {
            ????????
            if ?(?nSize? < ? sizeof (cmd)?)
            ????????????
            return ? 0 ;
            ????????
            ????????cmd
            * ?pheader? = ?(cmd * )pvoid;
            ????????
            ????????
            if ?(?pheader -> nCmd? == ?NETWORK_CMD_REP_LOGIN?)
            ????????
            {
            ????????????
            if ?(?nSize? < ? sizeof (tagRepClientLogin)?)
            ????????????????
            return ? 0 ;
            ????????????
            ????????????tagRepClientLogin
            * ?ptagRepClientLogin? = ?(tagRepClientLogin * )pvoid;
            ????????????
            ????????????
            if ?(?m_pClientObserver? != ?NULL?)
            ????????????????m_pClientObserver
            -> onRepLogin(ptagRepClientLogin -> bLoginSuccess);
            ????????????
            ????????????
            return ? sizeof (tagRepClientLogin);????
            ????????}

            ????????
            ????????
            return ? 0 ;
            ????}


            private :
            ????ClientObserver
            * ?m_pClientObserver;
            ????ILogable
            * ???????m_plog;
            }
            ;

            下面是測(cè)試的代碼
            #include?"client.h"
            #include?
            <string.h>

            class?testClient?:?public?Client
            {
            public:
            ????testClient()??
            {}
            ????
            ~testClient()?{}

            ????
            virtual?bool?send(const?void*?pvoid,?int?nSize)
            ????
            {
            ????????memcpy(m_buf,?pvoid,?nSize);
            ????????
            return?true;
            ????}


            ????
            int?NetWorkReceive(const?void*?pvoid,?int?nSize)
            ????
            {
            ????????
            return?onreceive(pvoid,?nSize);
            ????}


            ????
            bool?cmpMemory(const?void*?pvoid,?int?nSize)
            ????
            {
            ????????
            return?(?0?==?memcmp(m_buf,?pvoid,?nSize)?);
            ????}

            ????
            private:
            ????
            char?m_buf[1024];
            }
            ;

            int?main()
            {
            ????testClient?test;
            ????test.SendLogin(
            "test_username",?"test_pwd");

            ????tagClientLogin?clientlogin;
            ????memset(
            &clientlogin,?0,?sizeof(clientlogin));
            ????clientlogin.header.nCmd?
            =?NETWORK_CMD_LOGIN;
            ????strcpy(clientlogin.username,?
            "test_username");
            ????strcpy(clientlogin.userpwd,??
            "test_pwd");
            ????
            if(?!test.cmpMemory(&clientlogin,?sizeof(clientlogin))?)
            ????????cout?
            <<?"test?failed"?<<?endl;
            ????
            ????
            char?szBuf[1024]??=?{0};

            ????
            //?摸擬服務(wù)器發(fā)送的包長(zhǎng)度不足
            ????if(?0?!=?test.NetWorkReceive(szBuf,?sizeof(tagRepClientLogin)?-?10)?)
            ????????cout?
            <<?"test?failed"?<<?endl;

            ????
            //?摸擬服務(wù)器發(fā)送的包內(nèi)容非法
            ????if(?0?!=?test.NetWorkReceive(szBuf,?sizeof(tagRepClientLogin))?)
            ????????cout?
            <<?"test?failed"?<<?endl;

            ????tagRepClientLogin?repLogin;
            ????repLogin.header.nCmd?
            =?NETWORK_CMD_REP_LOGIN;
            ????memcpy(szBuf,?
            &repLogin,?sizeof(repLogin));

            ????
            //?摸擬服務(wù)器發(fā)送了正確的包
            ????if(?sizeof(tagRepClientLogin)?!=?test.NetWorkReceive(szBuf,?sizeof(tagRepClientLogin))?)
            ????????cout?
            <<?"test?failed"?<<?endl;
            ????
            ????
            return?0;
            }
            久久91精品国产91| 欧美一级久久久久久久大片| 久久久无码人妻精品无码| 99精品久久久久久久婷婷 | 丰满少妇人妻久久久久久4| 97精品伊人久久久大香线蕉| 久久久久免费精品国产| a级毛片无码兔费真人久久| 久久久www免费人成精品| 国产999精品久久久久久| 无码久久精品国产亚洲Av影片| 国产一久久香蕉国产线看观看 | 久久99热这里只频精品6| 久久国产精品久久久| 久久天天躁夜夜躁狠狠躁2022| 国产福利电影一区二区三区,免费久久久久久久精 | 久久久青草久久久青草| 国内精品伊人久久久久777| 久久久久国色AV免费看图片| 欧美黑人激情性久久| 久久久国产精华液| 国产精品99久久不卡| 777米奇久久最新地址| 久久久亚洲裙底偷窥综合| 久久嫩草影院免费看夜色| 91精品无码久久久久久五月天| 精品久久久久久久久午夜福利| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久精品a亚洲国产v高清不卡| 午夜精品久久久久久影视riav| 久久综合久久综合九色| 久久精品国产亚洲AV无码偷窥| 久久婷婷国产剧情内射白浆| 久久噜噜久久久精品66| 久久人人爽人人爽人人片AV东京热| 99久久99久久精品国产片果冻| 国产精品无码久久综合| 国产亚洲精品自在久久| 午夜精品久久久久久99热| 嫩草伊人久久精品少妇AV| 丁香色欲久久久久久综合网|