Socket自定義協(xié)議示例

- 請求報文與響應(yīng)報文格式

請求報文與響應(yīng)報文格式一致慎玖,均由6字節(jié)的報頭和荷載組成;其中報頭第一個字節(jié)為協(xié)議版本號笛粘,第二個字節(jié)為序列號趁怔,接下來的4個字節(jié)為荷載的長度。

- 協(xié)議格式

字節(jié) 5 4 3 2 1 0
說明 協(xié)議版本號 序列號 荷載長度 荷載長度 荷載長度 荷載長度

- 協(xié)議版本號說明:

當(dāng)前可用版本號:0x02

- 序列號說明:

序列號用于保證數(shù)據(jù)包的順序薪前,由客戶端生成润努,服務(wù)端返回響應(yīng)數(shù)據(jù)包時將其返回給客戶端;可用的取值范圍 0~255示括,其中0用作服務(wù)器推送數(shù)據(jù)專用的序列號铺浇,客戶端實際可用的范圍為 1~255。

- 荷載格式說明:

荷載為JSON字符串的 byte 數(shù)組垛膝,其中有兩個固定的字段 buzcmdidentity(如下代碼):

{
    "buzcmd": "業(yè)務(wù)指令(必填鳍侣,區(qū)分不同業(yè)務(wù)可使用“/”做區(qū)分,如:sys/user)",
    "identity": "唯一標(biāo)識(可選吼拥,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)"
}

- 客戶端請求:

  1. heartcheck(心跳檢測)

請求格式

{
    "buzcmd": "heartcheck",
    "identity": "唯一標(biāo)識(可選倚聚,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)"
}

響應(yīng)格式

{
    "buzcmd": "heartcheck",
    "identity": "唯一標(biāo)識(可選,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "code": "操作代碼(0-成功 1-警告 2-失斣淇伞)"
}
  1. login(登錄)

這里的登錄惑折,并不是嚴(yán)格來說的登錄,只是用來關(guān)聯(lián)業(yè)務(wù)與Socket連接的枯跑。

請求格式

{
    "buzcmd": "login",
    "identity": "唯一標(biāo)識(可選惨驶,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "username": "用戶名",
    "password": "密碼"
}

響應(yīng)格式

{
    "buzcmd": "login",
    "identity": "唯一標(biāo)識(可選,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "code": "操作代碼(0-成功 1-警告 2-失斄仓)",
    "data": "響應(yīng)數(shù)據(jù)信息",
    "message": "操作響應(yīng)提示信息"
}
  1. logout(登出)

請求格式

{
    "buzcmd": "logout",
    "identity": "唯一標(biāo)識(可選敞咧,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)"
}

響應(yīng)格式

{
    "buzcmd": "logout",
    "identity": "唯一標(biāo)識(可選,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "code": "操作代碼(0-成功 1-警告 2-失敼枷佟)",
    "data": "響應(yīng)數(shù)據(jù)信息",
    "message": "操作響應(yīng)提示信息"
}
  1. attend/identityrec(識別記錄上傳)

請求格式

{
    "buzcmd": "attend/identityrec",
    "identity": "唯一標(biāo)識(可選休建,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "uid": "用戶唯一標(biāo)識(如果該字段為空,那么卡號字段不能為空)",
    "cardnumber": "卡號",
    "rectime": "識別時間",
    "direction": "進出方向(1-進 2-出)",
    "recimage": "識別圖片(base64)",
    "devid": "設(shè)備唯一標(biāo)識",
    "areaid": "區(qū)域唯一標(biāo)識",
    "schoolid": "學(xué)校唯一標(biāo)識"
}

響應(yīng)格式

{
    "buzcmd": "attend/identityrec",
    "identity": "唯一標(biāo)識(可選评疗,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "code": "操作代碼(0-成功 1-警告 2-失敳馍啊)",
    "data": "響應(yīng)數(shù)據(jù)信息",
    "message": "操作響應(yīng)提示信息"
}

- 服務(wù)端推送

  1. push/user(推送用戶信息)

推送格式

{
    "buzcmd": "push/user",
    "identity": "數(shù)據(jù)包唯一標(biāo)識",
    "uid": "用戶唯一標(biāo)識",
    "username": "用戶姓名",
    "usertype": "用戶類型(S-學(xué)生,T-教師)",
    "classname": "班級名稱(教師用戶為空)",
    "cardnumber": "卡號(可為空)",
    "idimage": "底庫圖片百匆,圖片地址"
}

回執(zhí)格式

{
    "buzcmd": "logout",
    "identity": "唯一標(biāo)識(可選砌些,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "code": "操作代碼(0-成功 1-警告 2-失敗)",
    "data": "響應(yīng)數(shù)據(jù)信息",
    "message": "操作響應(yīng)提示信息"
}
  1. push/area(推送區(qū)域信息,暫未實現(xiàn))

推送格式

{
    "buzcmd": "push/area",
    "identity": "數(shù)據(jù)包唯一標(biāo)識"
}

回執(zhí)格式

{
    "buzcmd": "push/area",
    "identity": "唯一標(biāo)識(可選存璃,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "code": "操作代碼(0-成功 1-警告 2-失斅丶觥)",
    "data": "響應(yīng)數(shù)據(jù)信息",
    "message": "操作響應(yīng)提示信息"
}
  1. push/device(推送設(shè)備信息,暫未實現(xiàn))

推送格式

{
    "buzcmd": "push/device",
    "identity": "數(shù)據(jù)包唯一標(biāo)識"
}

回執(zhí)格式

{
    "buzcmd": "push/device",
    "identity": "唯一標(biāo)識(可選纵东,可用此字段來對數(shù)據(jù)包做唯一標(biāo)識)",
    "code": "操作代碼(0-成功 1-警告 2-失斦痴小)",
    "data": "響應(yīng)數(shù)據(jù)信息",
    "message": "操作響應(yīng)提示信息"
}

- 代碼示例(心跳檢測)

請求示例

String body = "{\"buzcmd\":\"heartcheck\"}";
ByteBuf buf = Unpooled.buffer(1 + 1 + 4 + body.length());
buf.writeByte(0x02);
buf.writeByte(0x01);
buf.writeInt(body.length());
buf.writeBytes(body.getBytes());

心跳響應(yīng)

ByteBuf buf = Unpooled.buffer(1 + 1 + 4 + body.length()); // 服務(wù)端響應(yīng),這里新增
byte version = buf.readByte();
byte sequence = buf.readByte();
int length = buf.readInt();
byte[] content = new byte[length];
buf.readBytes(content);

- 響應(yīng)荷載

字段 類型 說明
code byte 處理標(biāo)識(0-成功 1-警告 2-失斮饲颉)
data Object 響應(yīng)數(shù)據(jù)
message String 響應(yīng)消息
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洒扎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衰絮,更是在濱河造成了極大的恐慌袍冷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猫牡,死亡現(xiàn)場離奇詭異胡诗,居然都是意外死亡,警方通過查閱死者的電腦和手機淌友,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門乃戈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亩进,你說我怎么就攤上這事症虑。” “怎么了归薛?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵谍憔,是天一觀的道長。 經(jīng)常有香客問我主籍,道長习贫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任千元,我火速辦了婚禮苫昌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幸海。我一直安慰自己祟身,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布物独。 她就那樣靜靜地躺著袜硫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挡篓。 梳的紋絲不亂的頭發(fā)上婉陷,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天帚称,我揣著相機與錄音,去河邊找鬼秽澳。 笑死闯睹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的担神。 我是一名探鬼主播楼吃,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杏瞻!你這毒婦竟也來了所刀?” 一聲冷哼從身側(cè)響起衙荐,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捞挥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后忧吟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砌函,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年溜族,在試婚紗的時候發(fā)現(xiàn)自己被綠了讹俊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡煌抒,死狀恐怖仍劈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寡壮,我是刑警寧澤贩疙,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站况既,受9級特大地震影響这溅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棒仍,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一悲靴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莫其,春花似錦癞尚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛋褥,卻和暖如春临燃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工膜廊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乏沸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓爪瓜,卻偏偏與公主長得像蹬跃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铆铆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355