概要设计0.0.1 2019/10/13

EasyChat

client.c 功能描述

1.1 echat 建立与服务器的连接 登录

1.2 echat -h 说明用法

1.3 echat register 注册(暂不实现)

登录成功 提示符echat >>

2.1 exit 退出

2.2 search 查找已有聊天室

2.3 join id 加入已有聊天室

进入聊天室后提示符 echat room >>

3.1 send

3.2 exit

server.c 功能描述

监听端口,处理消息

程序语言 C/C++

开发环境 Linux

报文规则

客户端发送

login:name:passwd 登录报文,name与passwd均不含:,报文均以\0结尾

服务器端接受报文,对于未登录的客户端,仅处理login报文

对于登录成功的客户端,忽略登录报文

服务器用集合(或其它数据结构)储存已登录客户

服务器返回报文:login:success or login:fail

如前所述,对于成功登录的客户端,可以发送其它命令报文(未登录成功也可以发送,但服务器不处理)

display:user:all 列出所有用户,其状态为online or disable(不可见,离线或隐身,隐身暂时不考虑)

display:user:online 列出在线用户

display:space 列出不加密的聊天室(后续功能会对聊天室添加密码功能)

space:create:name 创建聊天室 name不唯一,有唯一的id

space:join:id 加入聊天室

space:leave:id (不加id,则服务器判断处于哪个id,这取决于我们是否支持同时加入多聊天室)

聊天室所有用户都离开则关闭聊天室,聊天室id短暂保留,leave是主动离开

聊天室不区分权限,(没有群主)

space:send : id :message 发送消息 (同上,若不支持多聊天室,id不必加)

总结:服务器目前支持三类报文

login 登录 (TCP断开连接则认为是注销)

display 查询 查询用户或聊天室,服务器只处理已登录客户

space 聊天室相关

服务器端报文

login:success | fail

对于没登录的客户端login报文,成功或失败,发送此报文

对于已登录的客户端login报文,不发送

对于未登录客户端的其他报文(非login)发送login:fail

对于已登录的客户端的其他报文

发送

status:text;data: text

text是json格式字符串,以{开头 }结尾

status和data中间以;隔开

status描述用户权限,错误信息等,data是客户端主要展示的内容

上诉报文字段,格式,分隔符仅供参考

客户端程序流程

EChat [-r -h -u [name] ] -r注册 -h帮助 -u以用户名name登录

login:

passwd:

成功后提示符 EChat > 接收命令

q 退出,断开TCP,服务器标记此用户(sockfd而不是用户名)未登录

display user all

display user online

display space

与上诉报文对应,发送display: 报文

create space name

发送创建聊天室请求,服务器分配id

join id

发送加入某个聊天室请求

help

客户端打印用法,display create join等

其他命令,告知用户命令不合法,输入help可查看命令

成功进入聊天室后提示符 EChat spacename

键入单独q,发送退出聊天室报文,退出聊天室

键入>, >后面均为要发送的内容,无需转义

(或者提示符是>> 默认是要发送消息,删除一个>可以键入q,推荐上面那种做法)

服务器端程序

数据结构与函数

一个set or map 存储已客户

一个map存储部分用户名密码,起到缓存作用,不用频繁读数据库

一个struct维护space

一个函数结束、分拣报文

几个函数处理报文,组装response

一个函数回复报文

notice

数据结构可以用C++标准库,C外部库或自己实现(倾向于前两种)

数据库

database test;

table user;

name(key) passwd

linux在线聊天报告,EChat: Linux下基于命令行的在线聊天系统相关推荐

  1. linux命令音乐视频合并,Linux下基于命令行的音乐播放器 (1)

    按照同事的话说,我是一个十足的命令控. 利用最近项目通宵发布的空闲时间中,写了一个命令行下的音乐播放器,以满足我在linux命令下的需求. 播放器利用技术: Python+GST(http://gst ...

  2. linux 命令行 播放器,Linux下基于命令行的音乐播放器

    玩家使用技术: Python + GST()+控制台解析 播放器自我维持操作: 1. 播放 2. 下一首 3. 上一首歌 4. 暂停 5. 查看播放列表信息 6. 查看当前的播放信息 7. 停止(退出 ...

  3. 树莓派linux界面命令行,Linux/Raspberry Pi下使用基于命令行的网页浏览器

    本文将向你介绍如何在树莓派上安装3个不同的基于文本的网页浏览器.大多数的网页浏览器在小派上运行都有点吃力,要不就是会消耗大量资源,所以一个替代方案就是使用一个基于命令行的网页浏览器. 到目前为止基于文 ...

  4. Linux下用命令行彻底删除文件

    一.Linux下用命令行彻底删除文件 Linux下一般会使用删除键或者rm命令.将文件扔到垃圾箱.但是,这些方法并没把文件从我们的电脑里彻底删除,只是把文件隐藏起来,让用户看不见而已. 1. shre ...

  5. linux终端上网,ubuntu中上网-如何使用ubuntu下用命令行上网?ubuntu下用命令行上网, 爱问知识人...

    2013-08-01 09:07:16 用于基本接口与IP配置的ifconfig ifconfig工具(interface configurator,接口配置器)提供了一些非常基本但是非常重要的功能. ...

  6. Linux 下从命令行打开pdf文件和html文件的命令

    Linux 下从命令行打开pdf文件和html文件的命令 [日期:2012-06-18] 来源:Linux社区 作者:hipercomer [字体:大 中 小] 如果你经常工作在Linux终端下,某个 ...

  7. linux下使用命令行分区、格式化文件系统、更新卷标名称

    2019独角兽企业重金招聘Python工程师标准>>> linux下分区.格式化文件系统.更新卷标名称,这些操作比较少用,但比较繁琐,下面记录一下. 1. 分区,一般使用fdisk, ...

  8. Linux命令行如何编辑word文档,在Linux平台下用命令行工具显示Word文档

    在Linux平台下用命令行工具显示Word文档 ·Antiword ·Catdoc ·wvWare[@more@] Viewing Word files at the command line Wed ...

  9. linux 命令行 播放器,linux下的命令行播放器moc

    linux下的命令行播放器moc 安装:直接APT-GET sudo apt-get install moc 安装完成后在终端用命令mocp(注意不是命令moc啊)打开moc播放器. 他默认是没有配置 ...

最新文章

  1. iphone连上wifi却上不了网_路由器上不了网怎么解决 路由器上不了网解决方法【详解】...
  2. WinCvs 操作参考手册
  3. sap 状态栏添加竖线
  4. B18_NumPy副本和视图(视图或浅拷贝、副本或深拷贝、深浅拷贝)
  5. PHP 面向对象:类和对象
  6. 在Linux系统环境下修改MySQL的root密码
  7. vue+elementUI的el-form的回车键登录
  8. 中国互联网Web2.0 100名单
  9. OpenGL学习笔记:GLAD和第一个窗口
  10. 用DiskGenius彻底删除文件能不能确保无法恢复
  11. 用手机远程登录电脑,太高端了。。。。
  12. MeeGo系统和SailFish系统_我是亲民_新浪博客
  13. python视频教程大全(转载)
  14. 《惢客创业日记》2021.04.24-30(周六)惢客拾金演示词
  15. 几种网站压力测试工具调研与使用
  16. 安卓测试工具:Appium 环境安装(mac版本)
  17. Note: The following floating-point exceptions are signalling: IEEE_UNDERFLOW_FLAG IEEE_DENORMAL
  18. php中urlencode与urldecode
  19. UML diagrams
  20. 架构高可用之限流-抽刀断水水更流

热门文章

  1. 正则表达式 判断 连号如“123456”、同号如“888888”、连同号如“112233”“222333”...
  2. 2003-can't connect to MYSQL server on 'localhost'(10038)
  3. java设置imageview图片大小_java – 在android中设置imageview
  4. linux驱动编写(看门狗)
  5. verilog学习记(快速入门)
  6. python 仿真模拟_Python SimPy 仿真系列 (1)
  7. python语言基本认识_Python基础语法合集——了解python
  8. linux 系统 指令lis,常用Linxu系统监控命令
  9. python代码雨_pygame实现烟雨蒙蒙下彩虹雨
  10. linux系统上安装toma,Linux-tar - osc_btnnkvs0的个人空间 - OSCHINA - 中文开源技术交流社区...