zoukankan      html  css  js  c++  java
  • 手机探索者开发实录—数据打包

    手机探索者开发实录—数据打包

    转载时请注明出处和作者联系方式
    作者联系方式:李先静 <xianjimli at hotmail dot com>

    我们采用XML打包数据,而且采用UTF-8编码,数据打包相对比较简单,主要考虑几个问题:

    数据组织,我们有三类数据要传输,一是发送给手机的请求数据包,二是从手机返回的响应数据包,三是从手机上报的事件数据包。

    请求数据包的组织方法 (我已经记不得DTD的语法细节,只能给个例子):

    1. <req name="clipboard_set_data">
    2. <me_data>
    3. <type>1</type>
    4. <length>3</length>
    5. <data>616263</data>
    6. </me_data>
    7. </req>


    Req表示是一个请求数据包,其属性name= clipboard_set_data表示设置剪切板数据,中间夹的是数据,长度是3数据却有6字符并不是无意中犯下的错误,3表示有效数据长度,6个字符是编码之后的数据。

    响应数据包的组织方法:

    1. <resp name="clipboard_get_data" ret="0">
    2. <me_data>
    3. <type>1</type>
    4. <length>3</length>
    5. <data>616263</data>
    6. </me_data>
    7. </resp>


    resp表示是一个响应数据包,其属性name= clipboard_get_data表示是响应获取剪切板数据的请求,ret表示执行操作的结果,这是在一个枚举中定义的,同样中间夹的是数据。

    事件数据包的组织方法:

    1. <on_event type="newsms">
    2. <me_event>
    3. <type>newsms</type>
    4. <info><received> some sms.</info>
    5. </me_event>
    6. </on_event>

    On_event表示事件发生,属性type表示事件类型,中间的参数有更详细的说明。

    程序实现比较简单,因为采用UTF-8编码,标准C中的字符串处理函数仍然可以使用。事先不知道数据包的大小,所以存放数据包的buffer要可以动态增长,我们封装一个MobileExplorerBuffer类,由它管理内存的动态增长。要传输的基本数据类型并不多,有必要把这些数据类型的打包封装起来,一方面可以重用代码,另外一方面也可以隔离变化。

    ~~end~~





  • 相关阅读:
    redis主从同步
    redis持久化
    redis发布订阅
    mariadb主从复制,
    nginx+uwsgi+django+virtualenv+supervisor发布web服务器
    Oracle 11gR2 RAC Installation on Oracle Linux 6.5
    ORA-1555 causes and solutions
    Linux实时查看日志的四种命令详解
    Linux查看日志常用命令
    oracle 11g 静默安装
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167626.html
Copyright © 2011-2022 走看看