聊天室项目功能需求介绍
功能前不加*号的为必须完成的要求,加*号的为附加功能。
基本要求:
- 帐号管理:
- 登录
- 注册(防止重复登录、防止重复注册、不显示密码内容)
- 密码加密
- 找回密码
- 好友管理:
- 添加好友(必须通过好友同意)
- 删除好友
- 查看好友列表(显示好友状态)
- 聊天通信:
- 私聊(必须保证不在对方的黑名单里,实时显示)
- 群聊
- 查看聊天记录
- 离线消息
- *屏蔽某人消息
- 群管理:
- 创建群
- 加群
- 退群
- 查看已加群,查看群成员
- 解散群(群主才有的权限)
- 设置管理员
- 踢人(群主或管理员拥有的权限)
- 传送文件
- 发送文件和接受文件(考虑大文件)
6.离线传输 - 离线消息,上线即传送
- **离线文件,上线即提醒有文件传送
7.有关客户端的要求: - 容错处理:对于输入内容进行判断,防止用户不正规操作导致程序崩溃。
- **聊天界面分屏:利用光标的移动对输入和屏幕聊天记录输出的分屏。
8.有关服务器的要求: - 稳定性:这是服务器最基本的要求。
(1).面对同时大量的客户端发送连接与数据时,服务器能正常处理。
(2).客户端的意外退出,不会导致服务器退出。比如客户端ctrl+c。
(3).数据能够正确接收和发送。
- 高效性:面对大量的并发处理请求到来时,能够快速的处理完。大家在设计服务器的时侯,尽量往率这方面靠吧。比如如果加了传输文件的功能,一个客户端往服务器发送一个特别大的文件时,服务器不能因为接收这个文件而导致后面其他用户的请求半天无法被处理。
- 服务器日志,将服务器的不同状态信息写入文件。
9.数据库的使用 - Mysql数据库的使用
附加要求:
- *cJson的使用。
- *I/O多路复用。最好使用epoll,epoll单线程或epoll多线程模式都可以。
- *调用外部应用,实现非实时语音视频
- *图形化显示(opengl、QT、GTK、curses)
- *文件发送与接收的断点续传
- *线程池的使用
- 。。。
PS:
基本的功能在以上都列出了。需要注意的是,功能在设计时要符合正常的逻辑要求。比如添加好友,需要对方的同意等。
登录
在Linux下没有getch()
这个函数,所以只能通过关闭显示区来实现密码的隐藏;
#include <stdio.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
int main()
{
struct termios old,new;
char password[8] = {
0};
char ch;
int i = 0;
tcgetattr(0,&old);
new = old;
new.c_lflag &= ~(ECHO | ICANON);
printf("请输入密码....\n");
while(1)
{
tcsetattr(0,TCSANOW,&new);
scanf("%c",&ch);
tcsetattr(0,TCSANOW,&old);
if(i == 8 || ch == '\n')
{
break;
}
password[i] = ch;
printf("*");
i++;
}
return 0;
}
在登录成功后会显示
进入菜单页面;
如果登录失败,例如账号错误,或者密码错误
注册
注册成功后会返回到登录界面;
加好友
此时如果账号为1000037
的人在线他会收到
如果他没有在线,他会在上线以后收到
这里就会显示在离线期间有一个好友发来申请,此时可以打开4.处理好友请求
如果接受了好友请求,在数据库中的friends
这张表中就会存下;
0
表示普通朋友,1
表示特别关心,-1
表示黑名单
好友聊天
输入#bey
表示退出与该好友聊天;
如果该好友在线,会直接将消息发送过去,好友此时会收到
如果此时两个用户恰好在直接对话则会直接显示消息内容
查看好友列表
查看聊天记录
当一方删除了聊天记录以后;
在数据表中删除一方的标志会变成0此时另一方还能查看;