实验步骤
实验基础流程
通过此流程,在其基础上实现群聊,私聊的功能(此实验流程图未完成,先将实验基础流程图放于此处,用于参考)
服务端实现步骤
2.1、通过创建信号,用于服务端退出
2.2、创建公共管道,通过此管道读入客户端数据
2.3、通过接受到客户端信息结构体中的特定信息来判断是否为新的客户端的登录“L”,若是,则创建客户端私有管道,保存客户端信息,并且向其他客户端发送某客户端登录信息;若不是则执行聊天“C”
2.4、在聊天中,服务端在私有管道写入信息,通过Client_Private_Flag来判断是否为私聊信息,还是群聊信息
群聊信息,通过遍历存储客户端,来广播式发送给客户端
如果接受到客户端信息中的特定信息来判断某客户端的退出,并关闭私有关管道
2.5、服务端相关函数
- 管道创建函数
- 创建客户端管道名函数
- 保存客户端信息函数
- 发送登录信息给客户端的函数
- 发送私聊信息给客户端的函数
通过判断@标志位,找到对应客户端用户名,进行匹配,来确定私聊客户端信息
- 发送群聊信息给客户端的函数
- 信号处理函数
客户端实现步骤
3.1、设置登录信息
通过pid,创建客户端的管道名
3.2、创建进程,用于进行通信
父进程,用于客户端写入信息;
子进程用于客户端读取信息
3.3、客户端相关函数
-
创建客户端管道名函数
-
客户端写入函数
-
客户端读取函数
-
通过私有管道读入信息
-
时间显示函数
设计时的一些思路
4.1、 客户端的初次登录与聊天的设置:
- 可以通过在发送给服务端的信息中添加相关标志,在服务器端进行识别,创建私有命名管道,以达到初次建立通信的目的
- 可以创建一个枚举,通过设置两个位,来区分登录与聊天,服务端通过判别标志位来调用不同的函数
4.2、 对于多个客户端,需要用一个函数来进行存储,以保证群聊的信息发送准确
4.3、 使用switch函数,要注意使用的类型情况,需要在之前定义对应的标志位的枚举
4.4、 对于聊天过程中,需要的标志位来判断私聊信息或是群聊信息
4.5、 在私聊判断中,应该设计一个位置用来判断用户名与聊天信息,通过获取客户端信息中,私聊用户名,来进行遍历查询,获得对应的客户端pid等信息,进而私发给它
详细代码地址: https://github.com/CFC-F/Linux-Chatroom