• <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.¢%

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

            測試網絡程序

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

            // ?網絡通信協議
            ////////////////////////////////////////////////////////////////////////////// //
            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?:?欲發送的緩沖區;?nSize?:?緩沖區的大小
            ???? virtual ? bool ?send( const ? void * ?pvoid,? int ?nSize)? = ? 0 ;

            ????
            // ?由網絡層調用,pvoid:?接收到的數據的緩沖區,?nSize?:?緩沖區的大小;??返回已經處理的數據長度
            ???? virtual ? int ?onreceive( const ? void * ?pvoid,? int ?nSize)? = ? 0 ;
            }
            ;

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

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

            // ?業務邏輯類
            ////////////////////////////////////////////////////////////////////////////// //
            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;
            }
            ;

            下面是測試的代碼
            #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};

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

            ????
            //?摸擬服務器發送的包內容非法
            ????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));

            ????
            //?摸擬服務器發送了正確的包
            ????if(?sizeof(tagRepClientLogin)?!=?test.NetWorkReceive(szBuf,?sizeof(tagRepClientLogin))?)
            ????????cout?
            <<?"test?failed"?<<?endl;
            ????
            ????
            return?0;
            }
            久久超碰97人人做人人爱| 亚洲国产另类久久久精品| 99久久免费国产精精品| .精品久久久麻豆国产精品| 亚洲国产成人久久精品影视| 久久青青草原精品影院| 欧美日韩中文字幕久久久不卡| 久久久久高潮综合影院| 91视频国产91久久久| 久久久亚洲精品蜜桃臀| 一本久道久久综合狠狠爱| 精品久久久无码中文字幕天天| 久久久久国产精品人妻| 国产精品欧美久久久久天天影视| 亚洲精品无码久久久久| 久久综合伊人77777| 久久国产色AV免费观看| 秋霞久久国产精品电影院| 思思久久好好热精品国产| 99re这里只有精品热久久| 中文成人无码精品久久久不卡 | 国产69精品久久久久99| 蜜桃麻豆WWW久久囤产精品| 欧美精品一区二区精品久久| 亚洲欧洲日产国码无码久久99| 国产精品热久久毛片| www性久久久com| 久久人爽人人爽人人片AV | 国产午夜精品理论片久久影视 | 亚洲狠狠婷婷综合久久蜜芽| 欧洲国产伦久久久久久久| 狠狠精品久久久无码中文字幕 | 成人久久精品一区二区三区| 久久久www免费人成精品| 亚洲精品无码久久毛片| 久久久久亚洲av毛片大| 天天做夜夜做久久做狠狠| 亚洲精品高清一二区久久| 大香伊人久久精品一区二区| 久久人人爽人人爽人人片av麻烦 | 午夜欧美精品久久久久久久|