Linux服务器端程序V1.0
功能要求
- 能接收来自远程客户端(有可能是多个客户端同时)发送的图片以及视频数据;
- 确保接收的数据的完整性;
- 读写数据库:为远程客户端提供课程信息,往数据库中写入课程视频的路径;
设计思路
- 服务器端程序采用多线程实现多客户端并发;
- 使用CRC或者SHA进行文件完整性校验;
- 响应远程客户端的查询数据库的请求貌似要求自己定义一种通信格式:命令模式,数据传输模式(文件名,数据,校验值);
任务进度
20160728: 多客户端文件传输;
设计细节
1 服务器端设计结构设计
客户端表示:
// 客户端表示
typedef struct{
int sockt_fd; // 客户端socket描述符
sockaddr_in addr; // 客户端地址
pthread_t pid; // 数据处理线程号
} lm_client; // 前缀lm_是为了防止命名
定义一个TCPSERVER
类来实现服务器端程序的功能。
TCPSERVER的成员变量(暂未考虑如何操作数据库)
类型 | 变量名 | 含义 | 备注 |
---|---|---|---|
int | m_server_socket | Server Socket号 | |
std::set | m_clients | 远程客户端 | |
pthread_t | m_pidAccept | 客户端连接请求处理线程号 | |
pthread_t | m_pidManage | 管理线程号 | 用于创建和注销数据处理线程 |
TCPSERVER的成员函数
类型 | 函数原型 | 输入参数 | 输出参数 | 备注 |
---|---|---|---|---|
public | bool Initialize(unsigned int nPort) | nPort: 端口号 | true:初始化成功;false:初始化失败 | 服务器初始化函数 |
private | void Uninitialize(void) | 服务器反初始化函数 | ||
private | static void* AcceptThread(void); | 连接请求处理线程 | ||
private | static void* ManageThread(void); | 连接管理线程 | ||
private | static bool FileReceive(char* filepath); | filepath:文件路径 | 文件传输是否成功 | 文件接收函数 |
private | static bool CmdReceive(char* message); | message:接收到的消息 | 是否处理成功 | 命令接收函数 |
private | static void CmdHandler(int cmdcode); | cmdcode:命令的编码 | 命令解码函数以及处理 |
数据库操作函数
- 查询教师账号信息——用于登录;
- 查询教师对应的课程信息——用于客户端界面显示;
- 写入课程视频路径
源代码说明
文件名 | 文件说明 |
---|---|
TCPSERVER.cpp | 服务器类TCPSERVER的定义 |
TCPSERVER.h | 服务器类TCPSERVER的声明 |
Headers.h | 头文件包含以及部分辅助函数声明 |
Headers.cpp | 辅助函数定义 |
TcpDefines.h | TCP传输相关常量、数据结构和回调函数的声明和定义 |
DatabaseFunc.h | 数据库操作相关函数的声明 |
DatabaseFunc.cpp | 数据库操作相关函数的定义 |
Communication.h | 通信格式编解码函数的声明 |
Communication.cpp | 通信格式编解码函数的定义 |