(1)用戶注冊:
【1】 ?客戶端可以注冊
注冊信息直接寫入文件即可;也可以先寫入鏈表,再寫入文件
用戶名密碼結(jié)構(gòu)體(僅供參考):
struct ?register
{
char ?name[32];
char ?passwd[32];
int ?flag;
struct ?register ?*next;
};
(2)用戶登錄:
【1】:client端接收用戶名和密碼->存于結(jié)構(gòu)體中->將結(jié)構(gòu)體發(fā)送給server端。
【2】:server端接收client發(fā)送的結(jié)構(gòu)體->打開存儲用戶名密碼的文件->文件寫入鏈表中->遍歷鏈表驗證用戶信息。
【3】:server端驗證正確發(fā)送allow,錯誤發(fā)回deny。client端接收,allow則進入聊天,deny則跳出。
用戶名密碼結(jié)構(gòu)體(僅供參考):
sruct ?login{
char ?name[32];
char ?passwd[32];
int ?flag;
struct ?login ?*next;
};
【4】:若驗證成功,server端產(chǎn)生一個新的套接字newfd,將它與用戶名封裝于同一個結(jié)構(gòu)體中,存儲在線用戶的信息。
? 存儲在線用戶信息的結(jié)構(gòu)體(僅供參考):
struct ?online{
char ?name[32];
int ?newfd;
struct ?online ?*next;
};
(3)一對一聊天:
【1】:在一對多聊天模型中,在client端選擇發(fā)送給一個對象,即可實現(xiàn)一對一聊天。
(4)一對n人聊天:
【1】:server端向client端發(fā)送在線用戶姓名列表。
【2】:client端欲發(fā)送信息到 ?user1 ?user2 ?...(選擇自己發(fā)送信息的接收方)。
【3】:server端接收client端在【2】中發(fā)送的信息,并截取user1,user2...的用戶名,同時截取聊天正文。
【4】:server端從在線用戶信息的鏈表中查找user1,user2...的套接字描述符。
【5】:server端將聊天正文發(fā)送給client端指定的接收對象user1,user2...。
(5)發(fā)送的信息
一對一
stu1:hello
一對多
stu1:stu2:stu3:hello
(6)主要功能描述
1、注冊,是否重復(fù)注冊
2、登錄,是否重復(fù)登錄,下線后是否會重復(fù)登錄
3、聊天轉(zhuǎn)發(fā)方法
4、客戶端-服務(wù)器框架 ?多進程(多線程)-多線程( ?select)
5、上線,下線通知
6、quit ?ctrl+c ?2種退出方法
7、記錄注冊消息
8、記錄日志
9、可以是基于TCP的socket,也可以是基于UDP的socket
11、密碼隱藏或者顯示*
12、Makefile(可選)
14、上傳文件,下載文件。
15、禁言,解禁言。
16、建立群、討論組。b