Skip to content

管控客户端软件设计

Request2609 edited this page May 11, 2019 · 10 revisions

1.设计决策

2.逻辑架构设计

3.接口设计

1.设计决策

使用Linux C系统编程,网络编程技术进行分析与设计,并使用uml描述系统的设计模型

使用C/C++语言进行开发

逻辑架构采用事件驱动架构

物理架构采用客户端,服务器模式的C/S架构

数据采用集中式存储,使用文件存储

2.逻辑架构设计

总体逻辑架构

图片

时序图

图片

open请求流程图

图片

close请求流程图

图片

关键问题

1.多个hook进程同时访问客户端维护的一条消息队列
 策略:使用特殊元素区分
 技术:不同进程添加接收消息字段时将消息类型设置为进程id,通过不同的id进行区别
2.服务端备份数据
 策略:使用别名存储
 技术:通过mac地址与文件路径生成笔名,存储在文件中,使用map提取

接口设计

1.所有宏定义

//打开文件请求
#define OPEN 1
//关闭文件请求
#define CLOSE 2
//发送文件成功
#define FINISH 3
//判断是否还连接
#define ALIVE 4
//不是监控目录
#define INVAILD 5
//存MAC地址数组的长度
#define MAC_LEN 128
//消息队列的路径
#define MSG_FILE "."
//数据缓冲区的长度
#define BUF_SIZE (4*1024)

2.传输文本格式

struct Packet {
   //消息请求类型
   int type;
   //客户端pid
   pid_t pid ;
   //文件路径
   char pathName[PATH_MAX] ;
};

3.消息队列传输消息类型

struct Msg {
    //消息类型
    long type ;
    //消息数据
    Packet buf ;
}; 

4.客户端与服务器之间的消息数据

struct Data {
    //客户端请求类型
    int type ;
    //客户端主机的mac地址
    char mac[MAC_LEN] ;
    //文件路径名
    char pathname[PATH_MAX] ;
    //数据缓冲区
    char buf[BUF_SIZE] ;
};
函数名 参数 功能描述 返回值
ProcessHandle char** argv 处理业务的入口 int
Connect const char* ip, const int port 连接服务器 int
IsMonitorDir const char * HookPath, const char * monitorPath 验证是否为监控的目录 int
SendData Msg msg, const char * monitorPath, int fd, int msgid 向服务端发送请求 void
RecvData Msg msg, const char * monitorPath, int fd, int msgid 接收服务端请求 void
Alive int fd 判断与服务器是否断开连接 int
IpcMsgCreate void 创建消息队列 int
IpcMsgOpen void 打开已有的消息队列 int
IpcMsgSend int msgid, Msg data 向消息队列中添加消息 int
IpcMsgRecv int msgid, Msg data 从消息队列中接收消息 int
IpcFree int msgid 删除消息队列 int
Clone this wiki locally