通信协议设计

文章目录

    • 通信协议设计
      • JSON请求示例:
      • C#对请求报文的解析
      • JSON应答示例:
      • C#对应答报文解析

通信协议设计

协议为了方便c#,js,java等语言的处理,采用json字符串。

JSON请求示例:

//请求格式
{
    "PktType": "GetUserInfo",
    "Token": "xxxxxxxxxxxx",
    "No": "3",
    "Ctrl": 0,
    "Params": {
        "id": 10
    }
}

说明:

  • PktType,用于识别报文的功能 。(通常查询用Get开头,编辑用Set开头)
  • Token,用户识用请求者的身份,服务器用户匹配请求者的相关信息。
  • No,可选,通常用于应答报文与请求报文进行匹配。
  • Ctr,可选,通常定义: 0,查询;1,插入;2,修改;3, 删除 (不带此字段,为默认为0)。
  • Params,参数信息(参数中的字段采用小写加_连接),常用字段举例:
    • start 查询起始序号,无此字段或等于0时,采用默认值。
    • size 单页查询行数 , 无此字段或等于0时,采用默认值10。

C#对请求报文的解析

	public class SocketCom //通用请求消息
    {
        public string 	PktType { get; set; }
        public object 	Params { get; set; }
        public int 		Ctrl { get; set; }
        public string 	Token { get; set; }
        public int 		No { get; set; } 
    }

说明:

  • 所有协议的报文,结构体尽量通用,减少结构的量。因为c#解析josn,需要先定义结构体,然后解来装入。
  • c#生成object对像,采用new实现。例如:var Param=new {xx=1,xx1="xx"}

JSON应答示例:

//应答格式
{
    "PktType": "RtGetUserInfo",
    "Token": "xxxxxxxxxxxx",
    "No": "3",
    "Ctrl": 0,
    "StatusCode": 0,
    "Status": "OK",
    "ListMsg": {
        "mch_id": "1484492872",
        "notify_url": "http://www.suianbo.com/index.html",
        "out_trade_no": "TEST1"
    },
    "Table": [
        {
            "id": 1,
            "name": "姓名1"
        },
        {
            "id": 2,
            "name": "姓名2"
        }
    ],
    "List": {
        "ColumnNo": {
            "id": 1,
            "name": 2
        },
        "ListData": [
            [
                "1",
                "姓名1"
            ],
            [
                "2",
                "姓名2"
            ]
        ]
    }
}

C#对应答报文解析

    public class RtSocketCom //通用应答消息
    {
        public string 	PktType { get; set; }
        public object 	Params { get; set; }
        public object 	ListMsg { get; set; }
        public DataTable Table { get; set; }
        public int 		Ctrl { get; set; }
		public string 	Token { get; set; }
        public int 		No { get; set; }       
        public string 	Status = "Fail";
        public int 		StatusCode = -1;
    }

说明:

  • 定义上面的解析结构体,用于将字符串的json解来装入。
  • 解析方法如下,图中pktStr为json格式的字符串,RtSocketCom为用来装json数据的结构。
    在这里插入图片描述
  • 上面解析后,像ListMsg这样的对像,还需要根据实际内容再解,如下图:
    通信协议设计_第1张图片
  • 上图中JObject是json解析库Newtonsoft.json里的class。
    通信协议设计_第2张图片

你可能感兴趣的:(编程)