在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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ò) 收藏

            ///////////////////////////////////////////////////////////////////////////////////
            ///////////////////////////////////////////////////////////////////////////////////
            //發(fā)包函數(shù)第一個參數(shù)為待發(fā)數(shù)據(jù)包,第二個參數(shù)為數(shù)據(jù)管道緩沖區(qū)
            //作用是把一個標準數(shù)據(jù)包以二進制的形式發(fā)送到數(shù)據(jù)管道緩沖區(qū)
            int Fabao(struct SJB*sjb,struct SJGD*sjgd)
            {
            MoveMemory(sjgd->sjgd,&sjb->tou.lxid,4); //填充數(shù)據(jù)包類型
            MoveMemory(sjgd->sjgd+4,&sjb->tou.sxid,4);//填充數(shù)據(jù)包順序標號
            if(sjb->tou.lxid==CTOS)
            {
            MoveMemory(sjgd->sjgd+8,&sjb->tou.sjbcd,4); //填充數(shù)據(jù)包長度
            MoveMemory(sjgd->sjgd+12,&sjb->data.msg_ctos.cmd,4);//填充命令標識
            MoveMemory(sjgd->sjgd+16,&sjb->data.msg_ctos.sjbcd,4);//填充整個附加數(shù)據(jù)緩沖區(qū)的長度
            MoveMemory(sjgd->sjgd+20,sjb->data.msg_ctos.shuju,sjb->data.msg_ctos.sjbcd); //填充附加數(shù)據(jù)
            sjgd->sjcd=sjb->tou.sjbcd; //更新數(shù)據(jù)管道長度數(shù)據(jù)
            return 1;
            }
            if(sjb->tou.lxid==STOC)
            {
            MoveMemory(sjgd->sjgd+8,&sjb->tou.sjbcd,4);//填充數(shù)據(jù)包長度
            MoveMemory(sjgd->sjgd+12,&sjb->data.msg_stoc.cmd,4);//填充命令標識
            MoveMemory(sjgd->sjgd+16,&sjb->data.msg_stoc.sjbcd,4);//填充整個附加數(shù)據(jù)緩沖區(qū)的長度
            MoveMemory(sjgd->sjgd+20,sjb->data.msg_ctos.shuju,sjb->data.msg_stoc.sjbcd); //填充附加數(shù)據(jù)
            sjgd->sjcd=sjb->tou.sjbcd; //更新數(shù)據(jù)管道長度數(shù)據(jù)
            return 1;
            }
            return 0;
            }
            ////////////////////////////////////////////////////////////////////////////////////
            ////////////////////////////////////////////////////////////////////////////////////
            //函數(shù)作用是直接從內(nèi)存讀取一個4字節(jié)的整數(shù),為下面的解包做準備
            int hex_int(char c) //從內(nèi)存讀取一個1字節(jié)的整數(shù)
            {
            if((c>=A)&&(c<=F))
            {
            return (int)(c-A+10);
            }
            if((c>=0)&&(c<=9))
            {
            return (int)(c-0);
            }
            return 0;
            }
            DWORD hex_dw(BYTE*hex) //從內(nèi)存讀取一個4節(jié)的整數(shù)
            {
            DWORD D=0;
            char x[2];
            sprintf(x,"%.2X",hex[0]);
            D+=hex_int(x[1]);
            D+=hex_int(x[0])*16;
            sprintf(x,"%.2X",hex[1]);
            D+=hex_int(x[1])*16*16;
            D+=hex_int(x[0])*16*16*16;
            sprintf(x,"%.2X",hex[2]);
            D+=hex_int(x[1])*16*16*16*16;
            D+=hex_int(x[0])*16*16*16*16*16;
            sprintf(x,"%.2X",hex[3]);
            D+=hex_int(x[1])*16*16*16*16*16*16;
            D+=hex_int(x[0])*16*16*16*16*16*16*16;
            return D;
            }
            ///////////////////////////////////////////////////////////////////////////////////
            ///////////////////////////////////////////////////////////////////////////////////
            //解包函數(shù)第一個參數(shù)是待解包的數(shù)據(jù)管道緩沖區(qū),第二個參數(shù)為解包數(shù)據(jù)存儲結(jié)構(gòu)
            //函數(shù)作用是把數(shù)據(jù)管道中的數(shù)據(jù)解封為一個標準的遠控數(shù)據(jù)包,用以控制程序流程
            int Jiebao(struct SJGD*sjgd,struct SJB*sjb)
            {
            sjb->tou.lxid=hex_dw(sjgd->sjgd); //解封數(shù)據(jù)包類型
            sjb->tou.sxid=hex_dw(sjgd->sjgd+4); //解封數(shù)據(jù)包順序標號
            sjb->tou.sjbcd=hex_dw(sjgd->sjgd+8); //解封數(shù)據(jù)包長度
            if(sjb->tou.lxid==CTOS)
            {
            sjb->data.msg_ctos.cmd=hex_dw(sjgd->sjgd+12); //解封命令標識
            sjb->data.msg_ctos.sjbcd=hex_dw(sjgd->sjgd+16); //解封整個附加數(shù)據(jù)緩沖區(qū)的長度
            MoveMemory(sjb->data.msg_ctos.shuju,sjgd->sjgd+20,sjb->data.msg_ctos.sjbcd); //解封附加數(shù)據(jù)
            return 1;
            }
            if(sjb->tou.lxid==STOC)
            {
            sjb->data.msg_stoc.cmd=hex_dw(sjgd->sjgd+12); //解封命令標識
            sjb->data.msg_stoc.sjbcd=hex_dw(sjgd->sjgd+16); //解封整個附加數(shù)據(jù)緩沖區(qū)的長度
            MoveMemory(sjb->data.msg_stoc.shuju,sjgd->sjgd+20,sjb->data.msg_ctos.sjbcd); //解封附加數(shù)據(jù)
            return 1;
            }
            return 0;
            }
            ////////////////////////////////////////////////////////////////////////////////////////

            本文引用地址:http://www.biyoush.com/article/201612/324249.htm

            這篇是服務(wù)器端的收發(fā)線程函數(shù)http://www.51hei.com/mcu/2611.html


            上一頁 1 2 下一頁

            評論


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

            關(guān)閉