电子词典:
首先服务器进行tcp初始化,而使用epoll检测listefd和服务端的输入信息,检测到listenfd时创建子进程
服务端使用tcp与客户端进行连接,每一个客户端请求连接时,服务端创建一个子进程与客户端进行对接,
加入心跳包机制,防止意外掉线时服务端对接进程不结束而始终占用系统资源,检测到alarm信号时子进
程自动结束,同时子进程的状态改变,系统内核会发送SIGCHLD信号给父进程,父进程则在此时回收僵尸
子进程。
若epoll检测到服务端输入为quit,则杀死所有子进程并结束程序
同时,最新创建的第一个子进程调用pro_bridge函数,各个对接子进程通过共享内存与pro_bridge通信传递
信息,pro_bridge则向服务端输出界面输出客户的登录下线等提示信息,而各个子进程将共享内存视为临界
资源,通过信号量互斥锁与第一子进程进行同步,以便正确输出提示信息。
每一个服务端的对接子进程检测到用户注册账号时创建相应的账号存入数据库,并历史记录文件account.his,
检测到用户查询时,查询数据库并发送相应的单词及释义给客户端,同时,将查询的单次写入对应的历史记录
文件中,若检测到用户要查看历史记录时,则读取相应的历史记录文件给对应的客户端,若用户删除对应的账号
时,从数据库中删除账号并将对应的历史记录文件删除。
功能:注册、登录、查询单词、查看历史记录、下线以及注销
注:有数据库sqlite3文件word_table.db,其中有两张表:word_table(word,explain), user(account,passwd)
服务端还有对应的历史记录文件夹history用于存放每个账户的历史记录文件account.his
客户端:

服务器代码:


头文件:

本文详细介绍了基于TCP的电子词典服务器设计与实现,包括子进程管理、心跳包机制、数据库交互、用户账户管理和历史记录功能。服务器使用epoll进行高效事件检测,支持注册、登录、单词查询和历史记录查看等功能。

1430

被折叠的 条评论
为什么被折叠?



