手机探索者开发实录—数据打包
手机探索者开发实录—数据打包
转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>
我们采用XML打包数据,而且采用UTF-8编码,数据打包相对比较简单,主要考虑几个问题:
数据组织,我们有三类数据要传输,一是发送给手机的请求数据包,二是从手机返回的响应数据包,三是从手机上报的事件数据包。
请求数据包的组织方法 (我已经记不得DTD的语法细节,只能给个例子):
Req表示是一个请求数据包,其属性name= clipboard_set_data表示设置剪切板数据,中间夹的是数据,长度是3数据却有6字符并不是无意中犯下的错误,3表示有效数据长度,6个字符是编码之后的数据。
响应数据包的组织方法:
resp表示是一个响应数据包,其属性name= clipboard_get_data表示是响应获取剪切板数据的请求,ret表示执行操作的结果,这是在一个枚举中定义的,同样中间夹的是数据。
事件数据包的组织方法:
On_event表示事件发生,属性type表示事件类型,中间的参数有更详细的说明。
程序实现比较简单,因为采用UTF-8编码,标准C中的字符串处理函数仍然可以使用。事先不知道数据包的大小,所以存放数据包的buffer要可以动态增长,我们封装一个MobileExplorerBuffer类,由它管理内存的动态增长。要传输的基本数据类型并不多,有必要把这些数据类型的打包封装起来,一方面可以重用代码,另外一方面也可以隔离变化。
~~end~~
转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>
我们采用XML打包数据,而且采用UTF-8编码,数据打包相对比较简单,主要考虑几个问题:
数据组织,我们有三类数据要传输,一是发送给手机的请求数据包,二是从手机返回的响应数据包,三是从手机上报的事件数据包。
请求数据包的组织方法 (我已经记不得DTD的语法细节,只能给个例子):
- <req name="clipboard_set_data">
- <me_data>
- <type>1</type>
- <length>3</length>
- <data>616263</data>
- </me_data>
- </req>
Req表示是一个请求数据包,其属性name= clipboard_set_data表示设置剪切板数据,中间夹的是数据,长度是3数据却有6字符并不是无意中犯下的错误,3表示有效数据长度,6个字符是编码之后的数据。
响应数据包的组织方法:
- <resp name="clipboard_get_data" ret="0">
- <me_data>
- <type>1</type>
- <length>3</length>
- <data>616263</data>
- </me_data>
- </resp>
resp表示是一个响应数据包,其属性name= clipboard_get_data表示是响应获取剪切板数据的请求,ret表示执行操作的结果,这是在一个枚举中定义的,同样中间夹的是数据。
事件数据包的组织方法:
- <on_event type="newsms">
- <me_event>
- <type>newsms</type>
- <info><received> some sms.</info>
- </me_event>
- </on_event>
On_event表示事件发生,属性type表示事件类型,中间的参数有更详细的说明。
程序实现比较简单,因为采用UTF-8编码,标准C中的字符串处理函数仍然可以使用。事先不知道数据包的大小,所以存放数据包的buffer要可以动态增长,我们封装一个MobileExplorerBuffer类,由它管理内存的动态增长。要传输的基本数据类型并不多,有必要把这些数据类型的打包封装起来,一方面可以重用代码,另外一方面也可以隔离变化。
~~end~~