SuperSocket 学习笔记 --内置的命令行协议

SuperSocket 学习笔记主要是学习SuperSocket 文档和其框架,给出文档链接地址:http://docs.supersocket.net/v1-6/zh-CN)

一、协议

  构建一个网络应用程序, 仅仅使用 TCP 还是 UDP 是远远不够的。 因为TCP 和 UDP 是传输层协议。定义了传输层协议是不能让网络的两端进行通信的。需要定义应用层通信协议把接收到的二进制数据转化成你程序能理解的请求。

二、SuperSocket 中内置的命令行协议

  在SuperSocket 中, 如果没有定义的协议,SuperSocket 将会使用命令行协议, 每个请求必须以回车换行结尾 " "。所有接收到的数据将会翻译成 StringRequestInfo 实例,其定义

public class StringRequestInfo
{
    public string Key { get; }

    public string Body { get; }

    public string[] Parameters { get; }

    /*
    Other properties and methods
    */
}

 SuperSocket 中内置的命令行协议用空格来分割请求的Key和参,因此当客户端发送如下数据到服务器端时:"LOGIN kerry 123456" + NewLine

服务器将会收到一个 StringRequestInfo 实例,这个实例的属性为:

Key: "LOGIN"
Body: "kerry 123456";
Parameters: ["kerry", "123456"]

同时定义 "LOGIN" 的命令, 这个命令的 ExecuteCommand 方法将会被执行,服务器所接收到的StringRequestInfo实例也将作为参数传给这个方法

public class LOGIN : CommandBase<AppSession, StringRequestInfo>
{
    public override void ExecuteCommand(AppSession session, StringRequestInfo requestInfo)
    {
      
    }
}

三、自定义命令行协议

规则:(1)请求 key 和 body 必须通过字符 ':' 分隔, 而且多个参数被字符 ',' 分隔。 

(2)代码扩展命令行协议写成:

(3)深度的定义请求的格式

基于接口 IRequestInfoParser 来实现一个 RequestInfoParser 类, 然后当实例化 CommandLineReceiveFilterFactory 时传入拟定一个 RequestInfoParser 实例

原文地址:https://www.cnblogs.com/machenghu/p/6441713.html