荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (jjk), 信区: Linux
标  题: [转寄] 小谈Term设计
发信站: 荔园晨风BBS站 (Fri Nov  2 20:23:18 2001), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjk.bbs@bbs.nju.edu.cn 所发表 】
发信人: danny (^_^), 信区: BBSDev
标  题: [转寄] 小谈Term设计
发信站: 南京大学小百合站 (Fri Nov  2 14:00:21 2001), 站内信件

  Term的提出:

  大家都已经熟知了在Windows98及以前版本里面封装的Telnet客户端,该客户
端不支持ansi色彩,和一些非标准的控制码,而这些在BBS里面是比较重要的,另
一个最严重的问题是乱码出现率非常高,这无论是对远程控制服务器还是对BBS用
户都是及其不方便的,另外,对于BBS用户,Windows的Telnet没有提供专门的BBS
特性支持,虽然windows 2000的Telnet加入了对ansi色彩的支持,但是一些BBS里
面非标准的控制码和一些符合BBS使用的功能仍然不够,所以Term的提出就显得很
有必要了。

  设计:

  Term的核心是Telnet协议这里简要的介绍一下它的实现

  1. 概述

   (1).用户终端
   Telnet协议定义了一个交互通信的工具,它允许用户与一个服务器进程进行
通信。Telnet定义了一种交互的、面向字符的通信。协议说明了一个由键盘和显示
屏组成的网络虚拟终端(NVT,network virtual terminal)。并且它制订了字符集,
每当可客户机发送数据时,把它本机的终端字符表示映射到NVT的字符表上,当接
收数据时又把NVT字符映射到本机字符上,是这样一种对称结构。
   (2).控制命令
   Telnet协议定义了一些命令字符串来表示当前应该采取什么操作,进入什么
状态,并且经过特殊安排,使这些字符串能够从数据包里面分离出来
   (3).对并发性的需要
   Telnet在概念上说是客户机在用户终端和远程服务之间传送字符,它与用户
终端交互时使用本机系统函数,它与远程服务通信时使用一个TCP连接,如下图说
明:





   为了在用户终端和远程服务之间提供全双工连接,Telnet客户机必须同时完
成两个任务:
    客户机必须读取用户在键盘上的输入,并且在TCP连接上把它们发送到远程
服务
    客户机必须从TCP连接的远程服务上读取字符,并显示在用户终端的屏幕上

   因为上面两点很可能是同时的,所以就必须有一种并发性,在windows里面
,我们可以利用消息机制来达到了这种并发需求。
   (4)Telnet的模型:








   (5)协议主算法:
    初始化Telnet类,将各缺省颜色属性,状态属性,系统设置里有关Telnet
部分初始化.
    在指明的远程主机地址上按用户指定的端口打开一个TCP连接.
    阻塞直到用户键入或者数据从TCP连接上到达(通过消息机制,当用户键入
时产生一个WM_KEYDOWN消息,当 TCP连接上到达数据时,TclientSocket类会得到
一个SeRead消息)
    数据从用户到达(接收到一个WM_KEYDOWN消息),便将其处理并把它翻译成
一个NVT表示,再将该NVT表示通过TCP传送出去;数据从TCP连接到达,则把它翻译
成本机字符表示(可以使用的时ProcessChar过程,并且该过程的参数时一个字符)
,并显示在本机上.
    返回第3步一直循环直到TCP连接断开。

  2. 有限状态机FSM(Finite state machine)

   大多数Telnet的实现采用有限状态机来说明命令序列的确切语法和对命令序
列的解释。一方面,它确切说明了发送方如何在数据流里面嵌入命令序列,另一方
面,也确切说明了接收到命令序列要如何解释它,所以有限状态机能够很好的实现
Telnet协议。
   有限状态机是指让当前终端的状态在有限的,已经定义好的状态里面不停循
环,如何控制当前应该处于什么状态呢?那就是从服务器端传来的命令序列,
   下面是一个有限状态机的示意图:





   在一些Telnet里面使用了三个FSM有限状态机,一个控制键盘事件的响应,
一个处理来自TCP连接上的字符,一个处理选项子协商细节,但由于这样将会使系
统开销增大,所以一些程序里面使用压缩FSM矩阵表示,尽管如此,我还是没有考
虑用这种机制,因为我们可以利用windows的消息机制来做到这一点,所以这里我
推荐使用一个FSM有限状态机,其中融合了以上三个FSM(并非完全融合,其主体部
分是处理来自TCP连接字符)。

  3. 用户状态的智能判断实现

   用户状态主要是指用户在BBS上的状态如上站,主菜单,环顾四方,讨论区
列表,阅读文章……等等,那么我们如何来判断这些状态呢?
   由于Telnet协议是面向字符的,所以这些字符也只能由字符特征来判断,
   因为BBS站点没有提供专门的命令序列来表示这些状态

  4. 非标准的ESC控制码的实现

   在BBS里面定义了一些非标准的ESC控制码,所以必须对这些控制码进行支持
,其中的非标准控制码只要是闪烁、延时、字体变换
   闪烁:(用5号命令来表示,如:*[1;5;32m是闪烁的绿色字符]
   为了实现闪烁字符,我们可以采用一定时间刷新屏幕一次的办法,在刷新屏
幕的同时,用一闪烁字符状态变量来控制什么时候改现实该字符,什么时候不应该
显示字符(这里用的不显示字符是将背景和字符设置成同一种颜色),另外,系统设
置里面用户可以自定义这个时间间隔.
   延时:
   延时是BBS里面弥补图形特别是动态图形的很好方法,利用延时可以制作出
很多琳琅满目的动画效果.
   延时的实现需要使用字符流模式的输出,当遇到延时控制码的时候,就可以
用sleep来睡眠当前操作,其中sleep的参数是由控制码里面的参数带来的,如:
*[1000M表示延时1秒钟,即1000毫秒。
   字体变换:
   字体变换是非标准ansi控制码,这个非标准完全可以在客户端实现,在BBS
里面使用以下表示
   *[1I 宋体 *[2I黑体 *[3I楷体 *[0I取消回缺省

  5. 各种功能实现概述

   首先,为确保功能的正常执行,需要智能的判断用户是否处于可以执行该功
能的正确状态,这就是前面谈到的判断状态问题,以这个为前提,就可以更好的开
发出这些功能。这些功能一些是利用自动发送键盘输入来实现,一些是自身集成一
些控制码实现,当然消息管理器就完全是利用消息存储然后加密的方法有以下功能

   文章编辑器
   信息输入条
   文章阅读工具
   文章下载工具
   精华区操作工具
   消息管理器

  总结:

    term设计的核心就是Telnet协议算法和ESC控制码以及附加功能的实现


--
..
...
....
.....

※ 来源:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 百合科技]
--
※ 转寄:.南京大学小百合站 bbs.nju.edu.cn.[FROM: 深圳大学BBS]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店