SuperSocket入门(四)-命令行协议

前面已经了解了supersocket的一些基本的属性及相关的方法,下面就进入重点的学习内容,通信协议。在没有看官方的文档之前,对于协议的理解首先想到的是TCP和UDP协议。TCP 和 UDP 是传输层协议。在Socket程序中仅仅定义了传输层协议是不能让网络的两端进行通信的。我们需要定义应用层通信协议把我们接收到的二进制数据转化成程序能理解的请求。

命令行协议是一种被广泛应用的协议。一些成熟的协议如 Telnet, SMTP, POP3 和 FTP 都是基于命令行协议的。 在SuperSocket 中,如果我们没有自定义协议的话,SuperSocket默认的协议就是命令行协议 ,这样就极大的简化了基于此类协议的开发。命令行协议定义了每个请求必须以回车换行结尾 "\r\n"。

SuperSocket设计了两个RequestInfo类:StringRequestInfo 和BinaryRequestInfo。

1、如果我们在 SuperSocket 中使用命令行协议,所有接收到的数据将会翻译成 StringRequestInfo 实例。

我们来看一下StringRequestInfo的定义:

public class StringRequestInfo {

public string Key { get; }

public string Body { get; }

public string[] Parameters { get; }

/* Other properties and methods */

}

StringRequestInfo有三个属性, Key是这个命令行的命令名,是用于关联Command的字符串;Data是一个命令的参数部分;Parameters是一个命令的参数列表。

因为CommandLineProtocol默认的CommandParser是用空格来区分命令名和参数,所以当客户端发送数据

"ADD 3 4" + 换行符

到服务器端时,服务器端会收到一个StringRequestInfo的实例cmdInfo, 实例各个属性值如下:

cmdInfo.Key = "ADD";

cmdInfo.Data = "3 4";

cmdInfo.Parameters = {"3 4"}

为了更好理解和明白,我们看一下调试的参数:

运行结果

看到这里StringRequestInfo 实例是不是已经明白了。其实SuperSocket不仅仅只能解析这些这种内置命令行协议,在不同的业务场景发生请求的格式可能都不一样。在某些协议中命令和参数,参数和参数之间的分隔符不是用空格,而是其它字符,在这种情况我们就需要重新设置CommandLineProtocol的CommandParser了。SuperSocket内建的BasicCommandParser可以直接设置命令名和参数,参数与参数之间的分隔符。

例如:协议命令名和参数之间用":"分隔,参数与参数之间用","分割,形如"ADD:3,4"。要实现这样的命令解析,我们只需用":"和","为参数来实例化BasicCommandParser然后赋值给CommandLineProtocol实例即可,代码如下:

MyServer类修改位置:

如果想更深度的定义请求的格式, 我们可以基于接口 IRequestInfoParser 来实现一个 TestRequestInfoParser 类, 然后当实例化 CommandLineReceiveFilterFactory 时传入拟定一个 TestRequestInfoParser 实例:

例如格式变更为HL:ECHO:data数据

测试结果:

2、如果我们在SuperSocket中使用二进制协议,所有接收到的数据将会翻译成BinaryRequestInfo实例。官方对这个协议的使用并没有具体描述,后期需要使用时进行具体学习了解。

本文参考官方文档:内置命令行协议http://docs.supersocket.net/v1-6/zh-CN/The-Built-in-Command-Line-Protocol

时间: 2024-08-03 07:07:13

SuperSocket入门(四)-命令行协议的相关文章

Standford Parser学习入门(2)-命令行运行

在Stanford parser目录中已经定义了一部分命令行工具以及图形界面,本文将介绍如何在windows使用这些工具进行语法分析,Linux下也有shell可以使用. 关于如何搭建环境请参考上一篇文章:Standford Parser学习入门(1)-Eclipse中配置 在解压目录中,打开命令窗口,运行lexparser.bat,会得到如下结果,即为命令行方式运行结果. 运行 lexparser-gui.bat,可弹出图形界面如下图,先点击Load Parser选择model文件(本例中用s

0 openwrt路由器入门 远程命令行+文件系统

如图,拿到一个openwrt路由器我们第一步要远程控制. 这里在买了两块wifi-robots  wifi视频模块. 0首先说下这个WIIF的信息 淘宝购买链接 https://item.taobao.com/item.htm?spm=a312a.7700824.w5001-18055431271.3.18644705m9g8Qz&id=555120245987&scene=taobao_shop GL.iNet 刷的系统 OpenWrt Barrier Breaker r38451 /

一个新手的Python自学之旅 #MacBook #《“笨办法”学Python》#第四章:言归正传讲Python:Mac系统的终端Terminal命令行快速入门之较复杂的命令

第四章:言归正传讲Python:Mac系统的终端Terminal命令行快速入门之"较复杂的命令" 在写第三章的时候,发现自己已经忘记了好多命令.其实我并没有按照Zed A.Shaw的提示,将这些命令做成小卡片,然后每天去记忆.可能源于我的目的并非是为了掌握并精研Python,我写博客并不是单纯为了分享自己的学习经验.而是希望自己能够通过学习python和写博客的形式,让自己以后养成这样的学习和记录习惯,有助于以后技能的掌握和积累.Python起到抛砖引玉的作用. 闲话少说,下面开始介绍

Linux入门基础命令(四)

Linux入门基础命令(四)文件系统与目录结构: 1.文件和被组织成一个单根倒置树结构2.文件系统从根目录下开始,用"/表示"3.以.开头的文件为隐藏文件4.路径分割的 /5.文件有两类数据(元数据:metadata 数据:data)6.文件系统分层结构:LSB(Linux Standard Base)FHS:(Filesystem Hierarchy Standard)7.文件名最长255个字节8.包括路径在内文件名称最长4095个字节9.蓝色-->目录 绿色-->可执行

一个新手的Python自学之旅 #MacBook #《“笨办法”学Python》#第三章:言归正传讲Python:Mac系统的终端Terminal命令行快速入门

第三章:言归正传讲Python:Mac系统的终端Terminal命令行快速入门 以后我都会将<“笨办法”学Python>简称为“这本书” 本人用了近5年的MacBook,但在此之前,从未使用过电脑自带的“终端Terminal”(图标:).在非程序员的世界里,建立和删除文件夹或文件,都是:鼠标右键点新建/删除,这是UI带来的便利.但是,却不知道如何利用命令行实现这些操作. 首先,要掌握几个我们平时常用,但在代码界有另外名称的名词:目录.路径.打印. --目录:我们认为它是这样的:标题:第一章:第

第4章4节《MonkeyRunner源码剖析》ADB协议及服务: ADB命令行客户端使用简介(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在所难免.有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息. 从前面几个小节我们知道ADB命令行客户端是存在与主机端的一个命令,用户可以使用该命令来发送服务请求到ADB服务器,ADB服务器再判断该服务请求是主机服务请求还是本地服务请求来决定是否应该将请求传送给远程adbd守护进程

Linux 入门学习-LINUX命令行描述及常用命令

Linux基础入门之(常用命令) 1.命令行构成 命令提示符一般有GUI.GLI两种接口 1.1命令行组成:命令提示符.prompt.bash(使用的shell) 1.1.1  提示符格式默认为系统变量设置 使用echo命令输出PS1系统本地变量 [[email protected] testdir]# echo $PS1 [\[email protected]\h \W]\$ 1.1.2  用户登录提示符: $:表示普通用户 #:表示系统用户 pwd 显示当前用户所在目录 [[email pr

Git简易的命令行入门教程

简易的命令行入门教程: Git 全局设置: git config --global user.name "imsoft" git config --global user.email "[email protected]" 创建 git 仓库: mkdir imsoft.github.io cd imsoft.github.io git init touch README.md git add README.md git commit -m "first

.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高,很有必要写个深入浅出的系列文章,本节内容帮助你入门.我将可能用Windows做开发环境,也可能用Linux/Mac,但是所有的dotnet CLI命令都是跨平台的,我们在windows/Linux/mac平台上开发跨平台的应用. 安装.NET Core .NET Core 包括.NET Core Runti