共 8 页 第 2 页
网络同步盘设计
周宇星 zyx.pulsars@gmail.com
2 通信协议
本同步盘协议有控制、上传和下载三个部分共 8 种消息,全部采用 JSON 编码。\n 代表一换
行符,\0 代表一尾零。具体罗列如下
名称
例子
作用
Signup
Signup\n
{
username: "naeioi",
password: "ToOMoOYoO"
}\0
客户机注册
SignupRes
SignupRes\n
{
/* code
* 0 成功
* 1 密码太短
* 2 密码太长
* 3 用户名已存在
* 4 用户名太长
*/
code: 0,
session:
"9e107d9d372bb6826bd81d3542a419d6",
message: "额外信息"
}\0
服务器返回注册结果
Login
Login\n
{
username: "naeioi",
password: "ToOMoOYoO",
session: "sdfaf"
}\0
客户机登陆
LoginRes
LoginRes\n
{
/* code
* 0 成功
* 1 用户名不存在
* 2 密码错误
*/
code: 0,
session:
"9e107d9d372bb6826bd81d3542a419d6",
message: "额外信息"
}\0
服务器返回登陆结果
Tunnel
Tunnel\n
{
/* role
* - Tunnel 指令发送端角色
* 0 Sender
* 1 Receiver
*/
role: 0,
/* mode
* - 同步模式
* 0 初始同步
创建隧道
共 8 页 第 3 页
网络同步盘设计
周宇星 zyx.pulsars@gmail.com
* 1 增量同步
* 2 恢复同步
*/
mode: 0,
session: "asdfasdf"
}\0
DirInfo
DirInfo\n
[
{
"filename": "v.mp4",
"path": "/video",
"md5":
"9e107d9d372bb6826bd81d3542a419d6",
"len": 1024,
"modtime": "2011-10-
08T07:07:09Z",
"deleted": 0/1
},
{ ... }
]\0
发送文件信息
Push
Push\n
[
{
"filename": "v.mp4",
"path": "/video",
"len": 1024,
"offset": 0
},
{ ... }
]\0
[Binary Data1]
[Binary Data2]
……
发送文件内容
Pull
Pull\n
[
{
"filename": "v.mp4",
"path": "/video",
"len": 1024,
"offset": 0
},
{ ... }
]\0
发送文件抓取请求
注:
1. DirInfo 协议中,文件是压平存储的,即不包含文件夹嵌套,每个文件在 JSON 数组中有一项。
2. SignupRes 中服务器将返回一随机 session,唯一标识一台客户机,保证不与已有客户机相同。
客户机登陆时,若是初次登陆,session 留空。服务器发现 session 为空,则判定这是一台初次登
陆的机器,随机生成 session 并在 LoginRes 中返回。