小谈BBS Term 设计

原创 2003年05月29日 05:23:00

文章摘要:
  Terminal(终端)是基于Telnet协议的终端控制软件,全面支持Telnet客户端登录远程系统,同时也可以是专为BBS(电子公告栏)设计的客户端软件,能够自动判断用户在站上的环境状态,并可以提供很多工具加强对BBS的支持。
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数据库设计文档

转载于http://www.cnblogs.com/cyq1162/archive/2011/04/10/2011433.html 秋式开源团队自成立以来,已近快一月时间.........
  • tianya441523
  • tianya441523
  • 2015年10月02日 20:32
  • 826

关于论坛数据库的设计

一个简单的论坛系统  1:包含下列信息:    2:每天论坛访问量300万左右,更新帖子10万左右。  请给出数据库表结构设计,并结合范式简要说明设计思路。  一. 发帖主题和回...
  • samjustin1
  • samjustin1
  • 2016年10月07日 11:04
  • 8844

论坛架构学习之数据库设计-discuz数据库设计的学习

1,论坛类以及BBS类的网站的设计
  • jaken09
  • jaken09
  • 2014年05月05日 13:33
  • 1391

天涯bbs谈感情

很多男的不是一见面就想和你结婚,而是一见面就想和你上床,就像你一见面,就想和男人慢慢发展感情,最后结婚一样。男女的思维不一样。不过,对于你来说,宁缺毋滥代表了你内心的一种态度,这种态度就是完美与偏执。...
  • likika2012
  • likika2012
  • 2013年08月13日 20:32
  • 865

分析论坛数据库设计&分析

1,数据库设计论坛数据库设计还是挺有意思的,按照业务逻辑进行拆分的数据库设计。 首先,如果是一个博客就一个post表记可以了。然后考虑到论坛数据量比较大,所以在设计上有优化。 论坛把数据库分成3个...
  • freewebsys
  • freewebsys
  • 2015年08月07日 18:26
  • 4740

基于Web的通用BBS系统的建立与维护

目  录     一、前言... 2 二、系统定义... 3 2.1 系统分析... 3 2.1.1 Internet以及Web技术的发展... 3 2.1.2 基于Web的通用...
  • u014316433
  • u014316433
  • 2014年05月23日 13:44
  • 2559

项目如何开始:怎样和客户谈需求(转)

转载自:http://blog.163.com/jeson_lwj/blog/static/13576108320121755727574/ 三种客户类型: 1 的确很专业。能提供基本...
  • u012377333
  • u012377333
  • 2016年09月14日 18:05
  • 971

一个简单的论坛系统

一个简单的论坛系统  1:包含下列信息:    2:每天论坛访问量300万左右,更新帖子10万左右。  请给出数据库表结构设计,并结合范式简要说明设计思路。  一. 发帖主题和回...
  • CareChere
  • CareChere
  • 2016年04月27日 11:00
  • 1161

Linux下$TERM环境变量的不同取值含义

xterm is supposed to be a superset of vt220, in other words it's like vt220 but has more features...
  • ly890700
  • ly890700
  • 2016年11月19日 12:30
  • 3126

手机k歌高分必备神器——BBS掌中宝Q1

很多人喜欢在家中使用手机K歌,目前相当丰富的K歌软件,让喜爱唱歌的人不仅仅可以在家中享受,也可以通过网络来同别人一起来实现多人娱乐,虚拟化的沟通其实也比较有乐趣。但无疑手机的麦克风拾音效果还是相当一般...
  • Founa
  • Founa
  • 2017年06月29日 15:45
  • 437
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小谈BBS Term 设计
举报原因:
原因补充:

(最多只允许输入30个字)