Linux--C项目:基于Linux的多用户的航班购票系统
1、项目实施环境
vm虚拟机、ubuntu系统、vscode代码编辑器
2、系统框架
2.1、客户端功能框架

2.2、客户端与服务端的TCP通信框架

3、项目细节分析
3.1. 用户的信息链表,航班票链表,航班链表
保存用户信息的链表使用的是单向不循环链表,其中航班票的头节点也保存在用户链表中,相当于,链表中有一个用户,就有一个节点指向属于其的航班票的链表,其节点信息设计如下图:

航班链表使用的是双向循环链表,其节点信息设计如下图:

航班使用的是单向循环链表,其节点信息设计如下图:

2.客户端与服务端的数据交换
客户端与服务端的数据交换结构是由一个结构体,里面定义了一个无符号整型(unsigned int ),其代表的是一个功能标志位,还定义了一个共用体(union service_data),其代表的是客户端与服务端的交换数据。其设计如下图:

功能标志位设置如下:




3.服务端多路IO复用select模型
服务端的select负责监听服务端的监听套接字以及客户端的已连接套接字。若用户开始运行客户端,则服务端的监听套接字会有响应,此时select监听到监听套接字有数据,就立即返回,然后判断监听套接字是否还在监听的文件描述符集合中,若在,则将已连接套接字保存到一个专门存放已连接套接字的数组connfd_buf。
若用户开始发送数据,则服务端的已连接套接字会有响应,此时select监听到已连接套接字有响应,此时select会立即返回,然后判断数组connfd_buf中哪一个已连接套接字connfd发送数据,然后,唤醒线程池中的一个线程去处理该用户的所发过来的数据。




源码地址: https://gitee.com/bodhi-cloud/qt-open-code.git
谢谢阅读,点个赞呗。

