一个SyncML协议的例子

下面是一个例子,描述同步传输的大体过程。同步传输有七种方式,下面的例子是双向传输,最复杂的一种。首先进行初始的准备工作,然后进行传输,再进行确认。

1. 客户端发出同步请求
<SyncML>
相当于同步的头文件,基本为固定模式
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>1</MsgID>
同步初始化时数值为一,相当于第几个回合
目标地址
<Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
源地址
<Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
认证
<Cred> <!--The authentication is optional.-->
认证模式
<Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta>
相当于密码
<Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"-->
</Cred>
<Meta> <!--The Meta is now used to indicate the maximum SyncML message size, which
client can receive.-->
<mi:MaxMsgSize xmlns:mi='syncml:metinf'>5000</mi:MaxMsgSize>
</Meta>
</SyncHdr>
头文件结束
<SyncBody>
唤醒对方,相当于发出信号
<Alert>
<CmdID>1</CmdID>
命令ID为1
<Data>200</Data> <!-- 200 = TWO_WAY_ALERT -->
共有七种连接方式,200代表其中一种
<Item>
<Target><LocURI>./contacts/james_bond</LocURI></Target>
进行操作的目标和地址,相当于数据库
<Source><LocURI>./dev-contacts</LocURI></Source>
<Meta>
相当于认证
<Anchor xmlns='syncml:metinf'>
<Last>234</Last>
<Next>276</Next>
</Anchor>
</Meta>
</Item>
</Alert>
上传
<Put>
<CmdID>2</CmdID>
<Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
固定的格式
<Item>
<Source><LocURI> devinf10</LocURI></Source>
固定的格式
<Data>
<DevInf xmlns='syncml:devinf'>
相当于本地的数据描述
<Man>Big Factory, Ltd.</Man>
<Mod>4119</Mod>
<OEM>Jane's phones</OEM>
<FwV>2.0e</FwV>
<SwV>2.0</SwV>
<HwV>1.22I</HwV>
<DevId>1218182THD000001-2</DevId>
<DevTyp>phone</DevTyp>
<DataStore>
<SourceRef>./contacts</SourceRef>
<DisplayName>Phonebook</DisplayName>
<MaxGUIDSize>32</MaxGUIDSize>GUID
相当于索引
<Rx-Pref>
<CTType>text/x-vcard </CTType>
<VerCT>2.1</VerCT>
</Rx-Pref>
<Tx-Pref>
<CTType>text/x-vcard</CTType>
<VerCT>2.1</VerCT>
</Tx-Pref>
数据存储能力
<DSMem>
<MaxMem>32650</MaxMem>
<MaxID>250</MaxID>
<FreeMem>22430</FreeMem>
<FreeID>122</FreeID>
</DSMem>
</DataStore>
<CTCap>
<CTType>text/x-vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>2.1</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>CELL</ParamName>
</CTCap>
<SyncCap>
<SyncType>01</SyncType>
<SyncType>02</SyncType>
</SyncCap>
</DevInf>
</Data>
</Item>
</Put>
<Get>
<CmdID>3</CmdID>
<Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
<Item>
<Target><LocURI> devinf10</LocURI></Target>
</Item>
</Get>
<Final/>
</SyncBody>
</SyncML>
2. 服务器端发出同步请求
<SyncML>
头文件
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>1</MsgID>
<Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
<Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
<Cred> <!--The authentication is optional.-->
<Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta>
<Data>dXNlcmlkOnBhc3N3b3Jk=</Data> <!--base64 formatting of "userid:password"-->
</Cred>
</SyncHdr>

<SyncBody>
相当于回复客户端请求
回复头文件
<Status>
<MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>http://www.syncml.org/sync-server</TargetRef>
<SourceRef>IMEI:493005/10/059280/0</SourceRef>
212代表正常
<Data>212</Data> <!--Statuscode for OK, authenticated for session-->
</Status>
回复Alert
<Status>
<MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd>
<TargetRef>./contacts/james_bond</TargetRef>
<SourceRef>./dev-contacts</SourceRef>
<Data>200</Data> <!--Statuscode for OK-->
200代表正常
把认证对上,对方请求的值
<Item>
<Data><Anchor xmlns='syncml:metinf'><Next>276</Next></Anchor></Data>
</Item>
</Status>
<Status>
回复Put
<MsgRef>1</MsgRef><CmdRef>2</CmdRef><Cmd>Put</Cmd>
<SourceRef> devinf10</SourceRef>
<Data>200</Data> <!--Statuscode for OK-->
</Status>
返回值,请求对方
<Results>
<MsgRef>1</MsgRef><CmdRef>3</CmdRef>
<Meta><Type xmlns='syncml:metinf'>application/xml</Type></Meta>
固定格式
<Item>
<Source><LocURI>devinf10</LocURI></Source>
固定格式
<Data>
相当于数据描述
<DevInf xmlns='syncml:devinf'>
<Man>Small Factory, Ltd.</Man>
<Mod>Tiny Server</Mod>
<OEM>Tiny Shop</OEM>
<DevId>485749KR</DevId>
<DevTyp>Server</DevTyp>
<DataStore>
<SourceRef>./contacts</SourceRef>
<DisplayName>Addressbook</DisplayName>
<Rx-Pref>
<CTType>text/x-vcard </CTType>
<VerCT>2.1</VerCT>
</Rx-Pref>
<Rx>
<CTType>text/vcard </CTType>
<VerCT>3.0</VerCT>
</Rx>
<Tx-Pref>
<CTType>text/x-vcard</CTType>
<VerCT>2.1</VerCT>
</Tx-Pref>
<Tx>
<CTType>text/vcard</CTType>
<VerCT>3.0</VerCT>
</Tx>
存储能力
<DSMem>
<MaxMem>132650</MaxMem>
<MaxID>1250</MaxID>
<FreeMem>122430</FreeMem>
<FreeID>1122</FreeID>
</DSMem>
</DataStore>
<CTCap>
<CTType>text/x-vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>2.1</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>CELL</ParamName>
<CTType>text/vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>3.0</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>FAX</ParamName>
<ParamName>CELL</ParamName>
<CTType>text/vcard</CTType>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
<PropName>VERSION</PropName>
<ValEnum>3.0</ValEnum>
<PropName>N</PropName>
<PropName>TEL</PropName>
<ParamName>VOICE</ParamName>
<ParamName>FAX</ParamName>
<ParamName>CELL</ParamName>
</CTCap>
<SyncCap>
<SyncType>01</SyncType>
<SyncType>02</SyncType>
<SyncType>07</SyncType>
</SyncCap>
</DevInf>
</Data>
</Item>
</Results>
进行双向传输,唤醒对方
<Alert>
<CmdID>1</CmdID>
<Data>201</Data> <!-- 201 = TWO_WAY_ALERT -->
<Item>
<Target><LocURI>./dev-contacts</LocURI></Target>
<Source><LocURI>./contacts/james_bond</LocURI></Source>
<Meta>
发送认证
<Anchor xmlns='syncml:metinf'>
<Last>200005021T081812Z </Last>
<Next>200005022T093223Z </Next>
</Anchor>
</Meta>
</Item>
</Alert>
<Final/>
</SyncBody>
</SyncML>
3. 客户端提交数据
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>2</MsgID>
<Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
<Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
</SyncHdr>
<SyncBody>
回复服务器的请求
<Status>
<MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>IMEI:493005/10/059280/0</TargetRef>
<SourceRef> http://www.syncml.org/sync-server </SourceRef>
<Data>212</Data> <!--Statuscode for OK, authenticated for session-->
</Status>
回复服务器的请求
<Status>
<MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd>
<TargetRef>./dev-contacts</TargetRef>
<SourceRef>./contacts/james_bond</SourceRef>
<Data>200</Data> <!--Statuscode for Success-->
<Item>
<Data>
Anchor回复对方请求的<next>值
<Anchor xmlns='syncml:metinf'><Next>200005022T093223Z </Next></Anchor>
</Data>
</Item>
</Status>
<Sync>
<CmdID>1</CmdID>
<Target><LocURI>./contacts/james_bond</LocURI></Target>
<Source><LocURI>./dev-contacts</LocURI></Source>
<Meta>
存储能力
<DSMem xmlns='syncml:devinf'>
<FreeMem>8100</FreeMem>
<!--Free memory (bytes) in Calendar database on a device -->
<FreeId>81</FreeId>
<!--Number of free records in Calendar database-->
</DSMem>
</Meta>
<Replace>
<CmdID>2</CmdID>
<Meta><Type xmlns='syncml:metinf'>text/x-vcard</Type></Meta>
<Item>
<Source><LocURI>1012</LocURI></Source>
数据项地址
<Data><!--The vCard data would be placed here.--></Data>
</Item>
</Replace>
</Sync>
<Final/>
</SyncBody>
</SyncML>
4. 服务器端提交数据
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>2</MsgID>
<Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
<Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
</SyncHdr>
<SyncBody>
回复客户请求
<Status>
<MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>http://www.syncml.org/sync-server</TargetRef>
<SourceRef>IMEI:493005/10/059280/0</SourceRef>
<Data>200</Data>
</Status>
回复Sync请求
<Status><!--This is a status for the client modifications to the server.-->
<MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd>
<TargetRef>./contacts/james_bond</TargetRef>
<SourceRef>./dev-contacts</SourceRef>
<Data>200</Data> <!--Statuscode for Success-->
</Status>
回复Replace
<Status>
<MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd>
<SourceRef>1012</SourceRef>
<Data>200</Data> <!--Statuscode for Success-->
</Status>
发出同步请求
<Sync>
<CmdID>1</CmdID>
<Target><LocURI>./dev-contacts</LocURI></Target>
<Source><LocURI>./contacts/james_bond</LocURI></Source>
<Replace>
<CmdID>2</CmdID>
<Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta>
<Item>
<Target><LocURI>1023</LocURI></Target>
<Data><!--The vCard data would be placed here.--></Data>
</Item>
</Replace>
<Add>
<CmdID>3</CmdID>
<Meta><Type xmlns='syncml:metinf'>text/x-vcard</type></Meta>
<Item>
<Source><LocURI>10536681</LocURI></Source>
<Data><!--The vCard data would be placed here.--></Data>
</Item>
</Add>
</Sync>
<Final/>
</SyncBody>
</SyncML>
5. 客户端显示数据更改情况
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>3</MsgID>
<Target><LocURI>http://www.syncml.org/sync-server</LocURI></Target>
<Source><LocURI>IMEI:493005/10/059280/0</LocURI></Source>
</SyncHdr>
<SyncBody>
回复同步请求
<Status>
<MsgRef>2</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>IMEI:493005/10/059280/0</TargetRef>
<SourceRef> http://www.syncml.org/sync-server </SourceRef>
<Data>200</Data>
</Status>
<Status>
<MsgRef>2</MsgRef><CmdRef>1</CmdRef><Cmd>Sync</Cmd>
<TargetRef>./dev-contacts</TargetRef>
<SourceRef>./contacts/james_bond</SourceRef>
<Data>200</Data>
</Status>
<Status>
<MsgRef>2</MsgRef><CmdRef>2</CmdRef><Cmd>Replace</Cmd>
<TargetRef>1023</TargetRef>
<Data>200</Data>
</Status>
<Status>
<MsgRef>2</MsgRef><CmdRef>3</CmdRef><Cmd>Add</Cmd>
<SourceRef>10536681</SourceRef>
<Data>200</Data>
</Status>
<Map>服务器和客户端的数据保持同步
<CmdID>1</CmdID>
<Target><LocURI>./contacts/james_bond</LocURI></Target>
<Source><LocURI>./dev-contacts</LocURI></Source>
<MapItem>
10536681和1024指的是同一个数据
<Target><LocURI>10536681</LocURI></Target>
<Source><LocURI>1024</LocURI></Source>
</MapItem>
</Map>
<Final/>
</SyncBody>
</SyncML>
6. 服务器端确认更改
<SyncML>
<SyncHdr>
<VerDTD>1.0</VerDTD>
<VerProto>SyncML/1.0</VerProto>
<SessionID>1</SessionID>
<MsgID>3</MsgID>
<Target><LocURI>IMEI:493005/10/059280/0</LocURI></Target>
<Source><LocURI>http://www.syncml.org/sync-server</LocURI></Source>
</SyncHdr>
<SyncBody>
<Status>
<MsgRef>3</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd>
<TargetRef>http://www.syncml.org/sync-server</TargetRef>
<SourceRef>IMEI:493005/10/059280/0</SourceRef>
<Data>200</Data>
</Status>
证实数据已经做了更改
<Status>
<MsgRef>3</MsgRef><CmdRef>1</CmdRef><Cmd>Map</Cmd>
<TargetRef>./contacts/james_bond </TargetRef>
<SourceRef>./dev-contacts</SourceRef>
<Data>200</Data>
</Status>
<Final/>
</SyncBody>
</SyncML> 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值