在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一個簡單的SOCKET程序的數(shù)據(jù)包結(jié)構(gòu)和封解包函數(shù)

            一個簡單的SOCKET程序的數(shù)據(jù)包結(jié)構(gòu)和封解包函數(shù)

            作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
            練習(xí)寫套接字通信程序時候?qū)懙囊欢未a,本來想寫個聊天室但寫來寫去進度卡在界面上接節(jié)下來都是通信部分的代碼

            因為只是試驗用所以都是用C寫的,等界面部分完工后會用類來封裝一下
            因為本人E文很爛所以變量和函數(shù)的命名是具有中國特色的,求理解.不過我注釋的很詳細(xì)了
            謹(jǐn)以此文紀(jì)念我那坑爹的編程自學(xué)生涯......................

            #include "stdio.h"
            #include
            //////////////////////////////數(shù)據(jù)包接構(gòu)//////////////////////////////////////
            //數(shù)據(jù)包類型CTOS為客戶端使用的數(shù)據(jù)包,STOC為服務(wù)端使用的數(shù)據(jù)包
            #define CTOS 1
            #define STOC 2
            //數(shù)據(jù)包存儲管道每個包最大為2000字節(jié),其中數(shù)據(jù)載荷為最大1800字節(jié),其余留著擴展數(shù)據(jù)包頭
            struct SJGD {
            BYTE sjgd[2000]; //數(shù)據(jù)緩沖區(qū)
            DWORD sjcd; //數(shù)據(jù)長度
            };
            //數(shù)據(jù)包頭大小為8字節(jié)
            struct MSG_TOU {
            DWORD lxid; //數(shù)據(jù)包類型
            DWORD sxid; //數(shù)據(jù)包順序標(biāo)號
            DWORD sjbcd; //數(shù)據(jù)包長度
            };
            //服務(wù)端-》客戶端包
            struct MSG_STOC {
            DWORD cmd; //命令標(biāo)識
            DWORD sjbcd; //整個MSG_STOC數(shù)據(jù)包緩沖區(qū)的長度
            BYTE shuju[1000]; //附加數(shù)據(jù)緩沖區(qū)
            };
            //客戶端-》服務(wù)器包
            struct MSG_CTOS {
            DWORDcmd; //命令標(biāo)識
            DWORD sjbcd; //整個MSG_CTOS數(shù)據(jù)包緩沖區(qū)的長度
            BYTE shuju[1800]; //附加數(shù)據(jù)緩沖區(qū)
            };
            //共用體
            union MSG_DATA {
            struct MSG_STOC msg_stoc;
            struct MSG_CTOS msg_ctos;
            };
            //完整數(shù)據(jù)包
            struct SJB {
            struct MSG_TOU tou; //數(shù)據(jù)包頭
            unionMSG_DATA data; //數(shù)據(jù)緩沖區(qū)
            };
            /////////////////////////////////////////////////////////////////////////////////
            /////////////////////////////////////////////////////////////////////////////////
            //封包函數(shù)第一個參數(shù)為數(shù)據(jù)包類型,第二個為命令標(biāo)識,這是數(shù)據(jù)包的重點遠(yuǎn)控命令會轉(zhuǎn)換成數(shù)字在這里傳輸
            //第三個為數(shù)據(jù)包順序標(biāo)號,第四個參數(shù)為附加數(shù)據(jù)緩沖區(qū),第五個參數(shù)為打包數(shù)據(jù)緩沖區(qū)
            //作用是把數(shù)據(jù)填充成一個標(biāo)準(zhǔn)的遠(yuǎn)控數(shù)據(jù)包為下面的發(fā)包做準(zhǔn)備
            int Fengbao(DWORD lxid,DWORD cmd,DWORD sxid,struct SJGD*sjgd,struct SJB*sjb)
            {
            sjb->tou.lxid=lxid; //填充數(shù)據(jù)包類型
            sjb->tou.sxid=sxid; //填充數(shù)據(jù)包順序標(biāo)號
            if(lxid==CTOS)
            {
            sjb->data.msg_ctos.cmd=cmd; //填充命令標(biāo)識
            MoveMemory(sjb->data.msg_ctos.shuju,sjgd->sjgd,sjgd->sjcd); //填充附加數(shù)據(jù)
            sjb->data.msg_ctos.sjbcd=sjgd->sjcd; //填充整個附加數(shù)據(jù)緩沖區(qū)的長度
            }
            if(lxid==STOC)
            {
            sjb->data.msg_stoc.cmd=cmd; //填充命令標(biāo)識
            MoveMemory(sjb->data.msg_stoc.shuju,sjgd->sjgd,sjgd->sjcd); //填充附加數(shù)據(jù)
            sjb->data.msg_stoc.sjbcd=sjgd->sjcd; //填充整個附加數(shù)據(jù)緩沖區(qū)的長度
            }
            sjb->tou.sjbcd=20+sjgd->sjcd; //填充數(shù)據(jù)包長度
            if((lxid!=CTOS)&&(lxid!=STOC)) return 0;
            return 1;
            }


            上一頁 1 2 下一頁

            評論


            技術(shù)專區(qū)

            關(guān)閉