(1)用户注册:
【1】 客户端可以注册
注册信息直接写入文件即可;也可以先写入链表,再写入文件
用户名密码结构体(仅供参考):
struct register
{
char name[32];
char passwd[32];
int flag;
struct register *next;
};
(2)用户登录:
【1】:client端接收用户名和密码->存于结构体中->将结构体发送给server端。
【2】:server端接收client发送的结构体->打开存储用户名密码的文件->文件写入链表中->遍历链表验证用户信息。
【3】:server端验证正确发送allow,错误发回deny。client端接收,allow则进入聊天,deny则跳出。
用户名密码结构体(仅供参考):
sruct login{
char name[32];
char passwd[32];
int flag;
struct login *next;
};
【4】:若验证成功,server端产生一个新的套接字newfd,将它与用户名封装于同一个结构体中,存储在线用户的信息。
存储在线用户信息的结构体(仅供参考):
struct online{
char name[32];
int newfd;
struct online *next;
};
(3)一对一聊天:
【1】:在一对多聊天模型中,在client端选择发送给一个对象,即可实现一对一聊天。
(4)一对n人聊天:
【1】:server端向client端发送在线用户姓名列表。
【2】:client端欲发送信息到 user1 user2 ...(选择自己发送信息的接收方)。
【3】:server端接收client端在【2】中发送的信息,并截取user1,user2...的用户名,同时截取聊天正文。
【4】:server端从在线用户信息的链表中查找user1,user2...的套接字描述符。
【5】:server端将聊天正文发送给client端指定的接收对象user1,user2...。
(5)发送的信息
一对一
stu1:hello
一对多
stu1:stu2:stu3:hello
(6)主要功能描述
1、注册,是否重复注册
2、登录,是否重复登录,下线后是否会重复登录
3、聊天转发方法
4、客户端-服务器框架 多进程(多线程)-多线程( select)
5、上线,下线通知
6、quit ctrl+c 2种退出方法
7、记录注册消息
8、记录日志
9、可以是基于TCP的socket,也可以是基于UDP的socket
11、密码隐藏或者显示*
12、Makefile(可选)
14、上传文件,下载文件。
15、禁言,解禁言。
16、建立群、讨论组。b