版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据挖掘技术在电信计费系统中的应用 摘要 随着网络的高速发展,一些大型厂商推出了服务器出租这项业务。为了使得出租商 快捷、方便以及高效的统计出用户的登录信息及应缴费情况,本文开发了一个电信计费 系统。 本系统采用 c/s 架构,在 unix 环境下以 c+为主要的开发语言开发完成。客户端的 功能包括定时从非结构型服务器日志文件采集用户数据,匹配登入/登出信息,向服务器 发送数据;服务端的功能包括接收客户端发送过来的数据,存储数据和整合数据等。从 海量用户数据中匹配登入/登出信息采用了数据挖掘技术,所提取到的有效计费信息存储 在 oracle 数据库中。 关键词:电信计费系统;数据挖掘;数据匹配
2、;数据整合 the application of data mining technology in the telecom toll system abstract with the rapid development of the network , some large companies such as china telecom launched the server rent business. in order to statistic user login information and charge more fastly, conveniently and efficien
3、tly, a telecom toll system is developed in this paper. this system is programmed by c+ language with c/s architecture in unix operater system.the functions in client port include reading user information from unstructural log file ,matching data and sending data to a server;the functions in sever po
4、rt include receiving data from client, data storage and integrating data. data mining technology is used in the huge amount of data matching processing and all the resultful data are all stored in oracle database. keywords:the telecom toll system ; data mining ;data matching ;data integration 目录 1 引
5、言.1 1.1课题来源及意义 .1 1.2国内外发展状况 .1 1.2.1 数据挖掘技术的基本知识.1 1.2.2数据挖掘技术的基本应用 .2 1.2.3数据挖掘技术的发展 .2 1.3 本文的主要工作 .2 1.3.1设计思想和实现目标 .2 1.3.2论文结构安排 .3 2 系统分析.3 2.1 可行性研究.4 2.1.1 技术可行性 .4 2.1.2经济可行性 .4 2.2需求分析 .4 2.2.1项目业务需求 .4 2.2.2功能模块 .5 2.2.3用例描述 .7 3概要设计.13 3.1 业务流程.13 3.1.1 业务流程中几个存储文件的命名规则.13 3.1.2 业务规则说明.
6、13 3.2 系统模块.13 3.3 接口设计.15 3.3.1 用户接口.15 3.3.2 外部接口.15 3.3.3 内部接口.16 3.4 数据结构设计.16 3.4.1 登入/登出记录数据类.17 3.4.2 匹配的用户登录记录类 .17 3.5 数据库设计.18 4 详细设计和实现.20 4.1 客户端模块 .20 4.1.1 数据读取模块设计 .20 4.1.2 数据匹配模块设计 .23 4.1.3 数据发送模块设计 .27 4.2 服务端模块 .31 4.2.1数据接收模块设计 .33 4.2.2数据存储模块设计 .36 4.2.3数据缓冲池 .38 4.3异常设计 .39 4.
7、3.1异常类结构图 .39 4.3.2客户端异常类说明 .39 4.4数据库具体实现 .40 5 结论.42 参考文献.43 致谢.44 1 引言 1.1课题来源及意义 随着计算机及互联网技术的高速发展,一些大的厂家例如电信,推出了服务器出租 这项业务,选择这项业务的用户可以通过远程登录服务器上进行自己的工作。服务器出 租就是指用户不需要自己购买服务器,只需要根据自己的业务要求,向运营商申请一个 帐号通过远程登录,便可以轻松享用服务器。由于服务器的价格相当昂贵,所以更多的 用户更倾向于选择租用,而不是购买。这样服务器出租便得到了广泛的发展。这时就需 要一款运行在服务器上的计时软件,来统计用户的
8、使用情况来做出相应的收费依据。在 此背景下,电信计费系统便应运而生了,电信计费系统是专门为服务器租赁商开发研究 的,租赁商只需要在各地区出租的服务器上安装本系统,就会有相应的数据从客户端源 源不断发送到服务端,这样便可以轻松的了解各地服务器的运营状况,以及盈亏情况, 同时也可以作为用户缴纳费用的依据。 电信计费系统是专门为电信制作的一款计费程序,可以非常方便、快捷、实时查询 出用户需要缴纳的费用。方便运营商在后续阶段进行合理的计划调整。通过对这一课题 的学习和研究,可以将电信计费系统的基本原理、实现流程等展现出来,并可作为新的 综合电信计费系统来学习和研究,也可以顺带了解实际电信实时计费的工作
9、流程,具有 一定的现实意义。 1.2国内外发展状况 由于用户数量巨大,所有用户信息交错保存在非结构型日志文件中。如何从海量数 据中找到某一用户的计费信息,就需要数据挖掘技术的支持。 1.2.1 数据挖掘技术的基本知识 数据挖掘(data mining,简称 dm),又称为数据库中知识发现(knowledge discovery from database,简称 kdd),它是一个从大量数据中抽取挖掘出未知的、有 价值的模式或规律等知识的复杂过程1。 整个知识挖掘(kdd)过程是由若干挖掘步骤组成,而数据挖掘仅是其中的一个主要 步骤。尽管数据挖掘仅仅是整个知识挖掘过程中的一个重要步骤,但由于目前
10、工业界、 媒体、数据库研究领域中,“数据挖掘”一词已被广泛使用并被普遍接受,因此也可以 广义地使用“数据挖掘”一词来表示整个知识挖掘过程,即数据挖掘就是一个从数据库、 数据仓库或其它信息资源库的大量数据中发掘出有趣的知识。 1.2.2数据挖掘技术的基本应用 实际上数据挖掘技术从一开始就是面向应用的。目前,在很多重要的领域,数据挖 掘都可以发挥积极促进的作用。尤其是在如银行、电信、保险、交通、零售(如超级市 场)等商业应用领域。数据挖掘能够帮助解决许多典型的商业问题,其中包括:数据库 营销、客户群体划分、背景分析、交叉销售等市场分析行为,以及客户流失性分析、客 户信用评分、欺诈发现等等。 1.2
11、.3数据挖掘技术的发展 数据挖掘的目的就是为企业决策提供的正确依据,利用计算机及信息技术辅助完成 从分析数据、发现问题、作出决策到采取行动这一系列操作。因此人们将这种机构行为 和手段称这为“事务智能”(business intelligent,简称 bi),bi 能极大地改进决策 的质量和及时性,从而改进机构的生产率或发挥竞争优势。所以近年来,一些大公司将 数据分析和数据挖掘工具及其有关技术组合起来形成所谓 bis(business intelligent softwave)。其中 sas 公司的的 enterprise minter 就是将数据源、数据预处理、数据存 贮、数据分析与发掘、信息
12、表示与应用等方面技术有机形成一个复杂数据挖掘系统有机 整体。 1.3 本文的主要工作 1.3.1设计思想和实现目标 设计思想是:任何用户登录 unix 系统,unix 系统都会记录用户的登录信息,所有用 户登入/登出的信息都保存在 unix 的系统日志文件中。数据采集系统就是通过读取 unix 系统日志文件中用户登入/登出信息,并找出成对的登入/登出记录,得到用户登录服务 器的登入时刻、登出时刻、登录时间长度等电信用户收费需要使用的数据。 实现目标是: 把匹配处理好的数据保存成电信工作人员可以阅读的文本文件,做为 电信收费依据。 1.3.2论文结构安排 本文的结构安排如下: 第一章 引言 介绍
13、了课题的概况和相关技术的发展情况,以及课题的设计思想和实现目标。 第二章 系统分析 介绍了项目中涉及到的各种数据信息,各个功能模块的运行流程。 第三章 概要设计 概要设计文档主要描述了数据挖掘系统的总体设计,从上述文档中明确 dms 系统需 求的基础,从而划分出 dms 系统的几大功能,进行系统开发分工,明确各模块之间的接 口,为进行后面的详细设计和实现做好准备。 第四章 详细设计及实现 本章主要介绍了各个模块的具体实现流程图和具体实现代码 第五章 结论 回顾并总结了课题的研究过程中所做的工作,也思考了研究过程中遇到的问题并列 出了实践中的不足之处,最后根据自己的认识对相关技术的发展前景进行了
14、展望。 2 系统分析 2.1 需求分析 电信公司现在具有哪些设备环境,能提供哪些原始数据,需要的最终数据形式是什 么,数据是什么。 电信公司为客户提供 unix 服务器出租的服务,这样就必须有一个程序通过从 unix 系统日志文件的海量数据中挖掘出用户登录、登出的时间来计算用户登录时长,并生成 数据报表存储在公司另外的一个 oracle 数据库中,以便电信公司计算费用。 2.2功能模块 根据用户需求分析,电信计费系统主要功能模块包括:数据读取,数据匹配,数据 发送,数据接收,数据存储,数据整合。 模块具体活动流程如图 2-1: 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一
15、 一 一 一 一 一 一 一 一 一 一 一 务 务 务 务 务 务 务务 务 务 务 务 务 务 图 2-1系统活动图 数据读取数据读取:该模块的主要功能是读取 unix 服务器上的的用户登录信息日志文件,备 份日志文件,读取上一次未匹配成功的登录记录信息,读取备份的日志文件。 数据匹配数据匹配:该模块的主要功能是将数据读取模块读取到的数据按照图一定的关系匹 配成完整的数据,未完成的匹配的数据保存在到文件中。方便下次读取时进行匹配。 数据发送数据发送:该模块的主要功能是建立客户端 socket 网络连接,将匹配好的用户登录 记录发送到服务,未发送成功的记录保存在文件中为下次发送时重新读取。
16、数据接收数据接收:该模块的主要功能是建立服务端的网络连接,从客户端读取匹配好的用 户登录信息放入缓冲池中。 数据存储数据存储:该模块的主要功能是将缓冲池中的数据保存到指定的数据库表中。 数据整合数据整合:该模块的主要功能是将数据库中保存的用户登录记录按照日、月、年整 合成详细的报表。 2.3用例描述 根据用户需求和功能分析,生成系统用例图。如图 2-1 所示。 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一
17、一 一 一 一 一 一 一 dms一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 图 2-2系统用例图 电信计费系统各功能模块的用例说明如下: 数据读取数据读取用例说明用例说明: 保存用户登录信息的 unix 系统日志文件在/var/adm 目录下,文件名为 wtmpx,日志 文件以二进制方式进行存储的,如果想在 unix 下查看 wtmpx,可以使用 last 命令: last -a -n number | -number -f filename name | tty wtmpx 文件中每条记录都包含有 372 个字节,所包含的每条记录项格式如下表 2-1 所
18、 示(其中灰色背景区域的数据为本系统需要采集的数据项): 表 2-1用户登录记录数据项格式 位置 范围 字节 长度 含义 000- 031 32 用户登录名 032- 035 4 初始进程 id 036- 067 32 设备名 068- 071 4 进程 id 072- 073 2 登录类型 7-登入,8-登出 074- 075 2 过程终止 076- 077 2 退出状态 2 这是 c 数据类型补齐产生的 空位 080- 083 4 登录时刻 /单位是秒 084- 087 4 和微秒 088- 091 4 会议编号,用于视窗 092- 111 20 预保留 112- 113 2 signif
19、icant length of ut_host 114- 371 257 /* 登录 ip*/ 日志文件登录数据项总数可以使用公式:记录项总数=日志文件大小/372。 数据采集基本流程如表 2-2 表 2-2数据采集的基本流程 用例名称数据采集 功能简述dms 管理员运行数据挖掘系统,完成数据采集的功能 前置条件数据挖掘系统在服务器上已正确安装 基本流1.管理员启动 dms 服务端系统 2.管理员启动 dms 客户端系统 3.客户端程序定期将登录数据文件备份,并清空源文件 4.客户端系统读取上次未匹配成功的登入信息 5.客户端读取备份的数据信息,剔除非法登录的用户 6.客户端获得用户的登入/登
20、出记录表 7.客户端将用户登入/登出记录匹配为完整的登录记录 客户端程序将不能成功匹配的登入记录写到文件中保存 8.客户端程序将匹配好的登录记录发送到服务端 9.服务端程序接客户端发送的数据 10. 服务端程序先将数据写到服务端文件存入缓冲池中 11.服务端程序将缓冲池的数据保存到数据库中 分支与异 常 第 1 步,若服务端程序启动失败,则发送异常报告。 第 2 步,若客户端程序启动失败,则发送异常报告。 第 3 步,若清空文件失败,则发送异常报告。 第 4 步,若上次未匹配的登入记录文件不存在,则跳过到第 5 步。 第 5 步,若读取备份的用户记录数据文件失败,则发送异常报 告。 第 7 步
21、,若指定的保存文件不存在,则创建文件。 第 7 步,若创建目录或写文件失败,则发送异常报告。 第 8 步,若发送数据失败,则定时重传。 第 10 步,若写入文件失败,则发送异常报告。 后置条件启动 contrab 命令,定时读取、发送数据 备注无 数据读取用例说明如表 2-3: 表 2-3数据读取的基本流程 用例名称数据读取 功能简述客户端程序读取系统数据文件和上次未匹配的登入记录,形 成用户登录记录项。 前置条件dms 客户端程序启动 基本流1) 读取上次未匹配的登入记录。 2) 将存储到记录放入链表中。 3) 读取备份的数据文件,清空源文件,将文件内容解析成 可用的记录。 4. 将解析得到
22、的用户登录记录放入对应的链表中。 5. 返回用户登录记录链表。 分支与异 常 第 1 步,若上次未匹配的登入记录文件不存在,则跳过到第 3 步。 第 3 步,若用户登录数据文件不存在,则报告异常。 后置条件无 备注无 数据匹配用例说明如图 2-4: 表 2-4 数据匹配的基本流程 用例名称数据匹配 功能简述dms 客户端程序读取用户的登入/登出记录链表,找到一条 匹配的数据,包装成匹配记录,添加到匹配链表中,删除登入/ 登出记录,并将本次未匹配的登入记录保存到指定文件中。 前置条件已经获得用户登入/登出记录链表 基本流1.访问用户登入/登出记录链表,按照登入/登出的 对应关系匹配数据,包装成匹
23、配记录。 2. 把匹配好的记录添加到匹配链表中 3. 将未匹配的登入记录写到指定的文件中。 分支与异常 后置条件无 备注无 数据发送用例说明: 表 2-5 数据发送的基本流程 用例名称数据发送 功能简述客户端将匹配好的数据通过网络 socket 发送给服务端。 前置条件用户登录记录已经匹配成功 基本流 1.读取发送失败的文件。 2.创建网络连接,链接到服务端。 3.遍历匹配的用户登录记录集合,将匹配好的用户登录数 据按照指定格式发送。 4.删除发送的信息 5.循环直到所有匹配的登录记录处理完成。 6.保存发送失败的记录到文件中。 7.关闭网络连接。 分支与异常 第 2 步,若网络连接失败,则发
24、送异常报告。 第 6 步,若写文件失败,则发送异常报告。 后置条件无 备注无 数据接收用例说明: 表 2-6 数据接收的基本流程 用例名称数据接收 功能简述dms 服务端接收从客户端传送过来的数据。 前置条件服务器程序启动,客户端完成匹配,连接到服务端,并 已发送数据。 基本流1.开启服务程序。 2.创建 socket 网络连接。 3.开启新的线程为客户端服务。 4.循环从客户端中接受数据,保存在数据池中。 5. 关闭流对象,关闭网络连接,终止线程。 分支与异常 第 1 步,若开启服务失败,则发送异常报告。 第 2 步,若获得网络连接失败,则发送异常报告。 第 4 步,若写出数据失败,则发送异
25、常报告。 后置条件无 备注无 数据保存用例说明: 表 2-6 数据保存的基本流程 用例名称数据保存 功能简述采集系统服务器将存放在数据池中的的数据保存到数据库。 前置条件服务器已经接收到数据。 基本流1、 建立到数据库的连接。 2、循环访问数据池中的数据。 3、 将数据池中的记录插入到数据库相应的表格中。 4、访问完成后断开与数据库的链接。 分支与异常 第 1 步,若建立数据库连接失败,则发送异常报告。 第 2 步,若插入记录失败,则发送异常报告。 后置条件无 备注无 数据整合用例说明: 表 2-7数据整合的基本流程 用例名称数据整合 功能简述服务端将接收到的用户登录的数据整合成日报表,月报表
26、 和年报表。 前置条件数据库中存放有用户登录信息 基本流1.执行 sql 语句,将数据库中存放的前一天的记录 按照用户名和实验室 ip 地址为条件组合,统计出前一天, 用户登录某一实验室机器的总时间,整理形成日报表。 2.执行 sql 语句,根据日报表数据整合出用户登录 服务器记录的月报表。 3.执行 sql 语句,根据用月报表数据整合出用户登 录服务器记录的年报表。 分支与异常 后置条件无 备注无 3概要设计 3.1 业务流程 3.1.1 业务流程中几个存储文件的命名规则 (1)系统日志文件由外部传递给客户端程序,客户端需要判定该文件是否存在然后才 能采集, 采集的数据为该文件的备份文件,备
27、份的文件由当前的日期和源文件名共同命 名。 (2)未匹配成功的登入数据项集合保存在文件中,文件名为 faillog.dat。 (3)发送失败的数据匹配集合保存在 failsend.dat 中。 3.1.2 业务规则说明 日志登入/登出数据项读取规则:系统日志文件中的数据项有很多类,通过登录名和 登录类型可以获知哪些信息需要采集,哪些信息可以舍弃,只有满足如下条件的数据项 才是需要采集的: (1)登录名若以(.)开头,一般是登录程序本身的日志数据项,为非法数据,不 需要采集。 (2)登录类型必须是 7(登入)或 8(登出),其他类型的可以舍弃。 3.2 系统模块 数据读取模 块 数据匹配模 块
28、数据发送模 块 /var/ad m/wtm px 数据接收模 块 数据存储模 块 数据采集客户端数据采集服务器 数据库 数据整合模 块 图 3-1系统功能模块图 物理上 dms 系统分为客户端和服务端两部分,在客户端包含数据采集模块,数据匹 配分析模块和数据发送模块;在服务端端包含数据接收模块,数据存储模块和数据整合 模块,各模块的主要功能如下所示: 数据采集模块:该模块的主要功能是读取 unix 服务器上的用户登录记录日志的备份 文件,提取有用的记录信息,如表 3-1 所示,保存到链表集合中,并传给数据匹配模块 来进行数据匹配。 表 3-1 要读取的原始记录数据 数据名数据含义是否需要采集备
29、注说明 logname 用户名是匹配同一次登录会话的必需数据之一 pid 登录进程 id匹配同一次登录会话的必需数据之二 type 登录类型 7-登 入,8-登出 type 的值在 1-8 之间,但只对 7 与 8 两种情 况进行处 logtime 登录时刻/单 位为秒 是要采集的数据,logtime 是登入或登出的时间 登录的 ip 地 址 是要采集的数据 数据匹配模块:数据匹配模块的主要功能是将采集到的用户记录信息按照登入、登 出关系匹配成一条完整的登入、登出记录,并计算出用户的在线时间,将这些信息推入 链表中,然后将这些信息发送给数据发送模块。该模块的输入数据是从日志文件中采集 到的原始
30、记录,输出的是匹配好的登入、登出记录。 表 3-2需要匹配登录记录数据 数据名数据含义 logname 用户登录名 logintime 登入时刻 logouttime 登出时刻 durations 登录时间长度 logip 登录终端的 ip 地址 数据发送模块:该模块的主要功能是建立连接到服务端,将匹配好的登录、登出记 录用通过网络 tcp/ip 协议发送到 dms 系统服务端。 数据接收模块:该模块在服务器端主要功能是从网络中接收客户端发送来的登录/登 出数据。 数据存储模块:该模块得主要功能是将从数据接收模块接收到的数据按照一定的格 式添加到数据库中,保存为用户登入/登出记录明细表。 数据
31、整合模块:将数据库中保存的用户登录/登出记录明细表的数据整理生成日报表, 根据日报表整合成月报表,根据月报表整合成年报表。 用户登录服务器的信息在客户端匹配好后发送给服务端,服务端接收到这些数据, 并保存在数据库中形成用户登录记录明细表。客户端定期从 wtmpx 中提取数据,定期向 服务端发送信息然后我们的程序需要用 plsql 定期的整理出日报表,月报表和年报表。 在数据库中保存的用户登录记录信息结构如下表所示: 表 3-3数据库中保存的登录记录数据 数据名数据含义 logname 用户名 logintime 登入时间 logouttime 退出时间 durations 在线时间长度 log
32、ip 登录终端的 ip 地址 labip 用户登录的实验室 ip 3.3 接口设计 3.3.1 用户接口 用户:执行命令,启动 dms 服务端程序。 系统:服务端系统正常运行,等待接收数据。 用户:执行命令,启动 dms 客户端程序。 系统:客户端系统正常运行,采集并发送数据。 3.3.2 外部接口 客户端系统读取用户登录记录文件,获得用户登录、登出信息。 客户端系统读取上次未匹配成功的登入记录文件,获取未匹配的登入记录数据。 服务端系统将匹配好的数据写入数据库表中。 服务端系统整合出日报表,月报表和年报表。 3.3.3 内部接口 客户端读取模块与匹配模块间的接口: 输入:读取解析好的用户登入
33、/登出记录链表 输出:无 客户端匹配模块与发送模块间的接口: 输入:匹配成功的用户登录记录链表 输出:无 客户端数据发送与服务端数据接收间的接口: 输入:匹配成功的用户登录记录项 输出:接收成功与否的消息 服务端数据接收模块与数据保存模块间的接口: 输入:发送成功的用户登录记录列表 输出:无 服务端数据保存模块与数据库间接口: 输入:发送成功的用户登录记录列表 输出:无 服务端数据整合模块与数据库间接口: 输入:用户登录记录明细表 输出:用户登录记录的日报表,月报表和年报表 3.4 数据结构设计 根据系统需求,设计出如下数据实体: 1、logrec:登入/登出记录类,用来存放一条原始的用户登入
34、/登出记录。 2、matchedlogrec:匹配成功的登录记录类,用来表示一条匹配成功的用户 登录记 录。 3.4.1 登入/登出记录数据类 (1)logrec 类图: 图 3-2 logrec 类图 (2)logrec 类成员变量说明 表 3-4lorec 类成员变量 成员变量定义成员变量说明备注 char logname32 用户名 int pid 用户的进程 id short type 登录类型7=登入;8=登出 int logtime 用户登入/登出时刻(秒) char logip257 用户登录 ip 3.4.2 匹配的用户登录记录类 matchedlogrec 类图: 图 3-3
35、matchedlogrec 类图 matchedlogrec 类成员变量说明: 表 3-5matchedlorec 类成员变量 成员变量定义成员变量说明备注 char logname32 用户登录名 char logip32 用户登录终端 ip int logintime 登入时刻(秒) int logouttime 登出时刻(秒) int durations 用户在线总时间(秒) char labip257 实验室 ip 3.5 数据库设计 根据用户需求,最后生成的数据库表包括:用户登录记录明细表、用户登录记录日 报表、用户登录记录月报表和用户登录记录年报表。数据库具体表结构如下: 表 3-
36、6用户登录记录明细表 字段类型长度约束备注 登录记录编号 number15pk 系统自动生成 用户 id char32not null 实验室 ip char20not null 用户终端 ip char257not null 登入时间 number20not null 登出时间 number20not null 登录时长 number12 由登出时间- 登入时间求得 表 3-7用户登录记录日报表 字段类型长度约束备注 用户 id char32pk 实验室 ip char20pk 日登录时长 number12not null 登出时间 date 表 3-8用户登录记录月报表 字段类型长度约束备
37、注 用户 id char32pk 实验室 ip char257pk 月登录时长 number12not null 登出时间 date 表 3-9用户登录记录年报表 字段类型长度约束备注 用户 id char32pk 实验室 ip char20pk 年登录时长 number12not null 登出时间 date 4 详细设计和实现 4.1 客户端模块 client 类封装数据挖掘系统客户端的所有功能。 图 4-1client 类图 sendlogs 方法定义: 表 4-1sendlogs 方法 方法原型 public void sendlogs() 方法功能执行数据挖掘系统客户端的完整过程,其
38、中 logreader 负责读 取数据,logsender 负责发送数据 参数说明无 返回类型 void 抛出异常调用类的异常 4.1.1 数据读取模块设计 logreader 类封装了读取日志数据的各项功能 图 4-2logreader 类图 logreader 成员变量说明如表 4-2 所示: 表 4-2logreader 成员变量 成员变量定义成员变量说明 char logfilename50 读取用户登录数据的日志文件名 char backfilename50 备份的日志文件名 char failloginsfilename50 未匹配成功的登录记录保存文件名 logins list
39、保存登入的记录链表 logouts list 保存退出的记录链表 matches list 保存匹配成功的记录链表 readlogs 方法如表 4-3 所示: 表 4-3readlogs 定义方法 方法原型public : list readlogs() 方法功能读取日志文件总调度函数 存储匹配好的数据集合 参数说明无 返回类型 list 抛出异常调用函数中可能抛出的异常 readlogs 方法活动图: 图 4-3readlogs 活动图 数据读取模块具体代码实现: int fd=open(backfilename,o_rdonly); struct stat filestate; fstat
40、(fd, coutfilesize:filestate.st_sizeendl; for(int i=0;ifilestate.st_size/372;i+) logrec log; read(fd, lseek(fd,36,seek_cur); read(fd, log.pid=htonl(log.pid); / 大小端转换 htons! read(fd, log.logtype=htons(log.logtype); lseek(fd,6,seek_cur); read(fd, log.logtime=htonl(log.logtime); lseek(fd,30,seek_cur); r
41、ead(fd, lseek(fd,1,seek_cur); if(log.logname0!=.) if(log.logtype=7) logins.push_back(log); if(log.logtype=8) logouts.push_back(log); 4.1.2 数据匹配模块设计 backup 方法如表 4-4 所示: 表 4-4backup 定义方法 方法原型private:void backup() 方法功能备份日志文件 并清空原文件 参数说明无 返回类型 void 抛出异常读取数据失败,抛出 backupexception backup 方法活动图: 图 4-4backup
42、 活动图 readfaillogins 方法如表 4-5 所示: 表 4-5readfaillogins 定义方法 方法原型 public: void readfaillogins 方法功能读取上一次未匹配成功的登入记录 参数说明无 返回类型 void 抛出异常读取数据失败,抛出 readfailloginexception readfaillogins 方法活动图: 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 图 4-5readfaillogins 活动图 readbackupfi
43、le 方法如表 4-6 所示: 表 4-6readbackupfile 定义方法 方法原型 public: void readbackupfile 方法功能读取备份的日志文件 把读取到的数据放入对应的属性中 参数说明无 返回类型 void 抛出异常读取数据失败,抛出 readbackfileexception readbackupfile 方法活动图: 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 ,i+ 一 一 logrec 一 一 一 一 一 一 一 一 一 一 一 m type=7一 一 type=8 一 logrec一 一 一 一 一 一
44、一 一 i=m 一 logrec 一 一 一 一 一 一 一 一 一 一 i=0 一 一 一 一 图 4-6readbackupfile 活动图 matchlogrec 方法如表 4-7 所示: 表 4-7matchlogrec 定义方法 方法原型public: void matchlogrec() 方法功能 将用户登入/登出记录按照用户名和 ip 匹配为完整的登录记录, 存入 matches 参数说明无 返回类型 void 抛出异常匹配数据失败,抛出 matchlogrecexception matchlogrec 方法活动图: 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一
45、 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 matchedlogrec一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一
46、一 一 一 一 一 一 一 一 一 一 一 一 一 图 4-7matchlogrec 方法活动图 savefaillogins 方法如表 4-8: 表 4-8savefaillogins 定义方法 方法原型public: void savefaillogins() 方法功能将匹配失败的日志记录保存到指定的文件中 参数说明无 返回类型无 抛出异常匹配数据失败抛出 savefailloginsexception 数据匹配模块具体代码实现: list:iterator oit=logouts.begin(); list:iterator iit=logins.begin(); for(;oit!=l
47、ogouts.end();) for(iit=logins.begin();iit!=logins.end() if(!strcmp(oit-logname,iit-logname) strcpy(mlog.logname,oit-logname); mlog.pid=oit-pid; mlog.logintime=iit-logtime; mlog.logouttime=oit-logtime; mlog.durations=oit-logtime-iit-logtime; strcpy(mlog.logip,oit-logip); matches.push_back(mlog); logi
48、ns.erase(iit); break; else iit+; logouts.erase(oit); oit=logouts.begin(); 4.1.3 数据发送模块设计 logsender 类定义 图 4-8logsender 图 logsender 类成员变量说明如表 4-8 所示: 表 4-8logsender 类成员定义 成员变量定义成员变量说明 char failsendfilename50 保存发送失败记录的文件名 int fd 采集系统服务器网络描述符 unsigned short port 链接到的服务器端口 char serverip20 要连接的服务器 ip send
49、matches 方法如表 4-9 所示: 表 4-9sendmatches 定义方法 方法原型 public void sendmatches(list*matches) 方法功能发送匹配成功的日志集合到服务端 参数说明matches 为存储发送数据的集合链表 返回类型 void 抛出异常建立连接失败,抛出 senddataexception 异常 sendmatches 方法活动图: 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 图 4-9sendmatches 活动图 initso
50、cket 方法如表 4-10 所示: 表 4-10initsocket 定义方法 方法原型 public void initnetwork() 方法功能 根据 ip 和 port 以及 serverip 连接到服务端,初始化网 络 参数说明无 返回类型 void 抛出异常建立连接失败,抛出 senddataexception 异常 readsendfailed 方法如表 4-11 所示: 表 4-11readsendfailed 定义方法 方法原型 public: voidreadsendfailed(list*matches) 方法功能读取未发送成功的数据文件 参数说明matches: 匹配
51、好的用户日志记录链表指针 返回类型 void 抛出异常发送数据失败,抛出 senddataexception 异常 savesendfailed 方法如表 4-12 所示: 表 4-12savesendfailed 定义方法 方法原型 public void savesendfailed (list*matches) 方法功能存储发送失败的数据 以备下次重新读取发送 参数说明 matches: 匹配好的用户日志记录链表指针 存储时 把集合中剩余的数据存储到文件 返回类型 void 抛出异常发送数据失败,抛出 senddataexception 异常 数据发送模块具体代码实现: 第一步:读取上次
52、匹配失败的数据 int fd=open(filename,o_rdonly|o_excl); if(fd=-1) return; while(1) matchedlogrec match; int re=read(fd, if(repush_back(match); 第二步骤:初始化网络,建立到服务器的连接 fd=socket(pf_inet,sock_stream,0); if(fd=-1) coutnet work init failedendl; struct sockaddr_in addr=0; addr.sin_family=pf_inet; addr.sin_port=htons
53、(port); addr.sin_addr.s_addr=inet_addr(serverip); int confd=connect(fd,(sockaddr*) if(confd=-1) coutnet work conn failedsize()0) list:iterator it=matches-begin(); matchedlogrec match=*it; int re=write(fd, matches-erase(it); if(re=-1) break; close(fd); 4.2 服务端模块 server 类封装了服务端的所有模块功能 图 4-10server 类图
54、server 成员变量说明如表 4-13 所示: 表 4-13server 成员变量说明 成员变量定义成员变量说明 char labip20 实验室 ip int fd socket 描述符 datarecivethread productor 接收数据的线程 datasavethread customer 存储数据的线程 userdata datapool productor 和 customer 共享的数据缓冲池 server 类方法说明: initsocket 方法如表 4-14 所示: 表 4-14initsocket 方法 方法原型 public void initsocket( )
55、 方法功能初始化网络,启动 socket 的 bind,listen 和 accept 参数说明无 返回类型 void 抛出异常初始 serversocket 失败,发出异常 dmsserverexception startservice 方法 如表 4-15 所示: 表 4-15startservice 方法 方法原型 public void startservice( ) 方法功能响应客户连接请求,开启线程为接收客户端数据 参数说明无 返回类型 void 抛出异常响应客户请求过程失败,发出异常 dmsserverexception 4.2.1数据接收模块 图 4-11datareceive
56、thread 类图 datarecivethread 成员变量的说明如表 4-16 所示: 表 4-16datarecivethread 成员变量说明 成员变量定义成员变量说明 pthread_t threadid 标识一个线程对象 run()方法如表 4-17 所示: 表 4-17run()定义方法 方法原型 public void run( ) 方法功能完成具体的数据接收工作 参数说明无 返回类型 void 抛出异常 start 方法如表 4-18 所示: 表 4-18start 定义方法 方法原型 public void start( ) 方法功能完成线程的创建和启动 参数说明无 返回类
57、型 void 抛出异常 recivedata 方法如表 4-19 所示: 表 4-19recivedata 定义方法 方法原型 public void* recivedata( ) 方法功能创建线程时调用的线程函数 参数说明无 返回类型 void* 抛出异常 数据接收模块具体代码实现: 通过创建线程来实现对数据的接收,这样可以接收来自多个客户端的据 第一步:初始化网络 int fd=socket(pf_inet,sock_stream,0); if(fd=-1) coutsocket init failedendl; sockaddr_in addr; addr.sin_family=pf_i
58、net; addr.sin_port=htons(9988); addr.sin_addr.s_addr=inaddr_any; int bfd=bind(fd,(sockaddr*) if(bfd=-1) coutbind failedendl; listen(fd,10);/监听 sockaddr_in caddr=0; socklen_t clen=sizeof caddr; while(1) int afd=accept(fd,(sockaddr*) if(afd=-1) coutaccept failedrun(); void productthread:run() matchedl
59、ogrec mlog=0; int i=0; while(1) i+; sleep(1); int cfd=recv(afd, if(cfd=0) cout接受完成或者网络异常endl; break; savelogrec slog; datapool.push_data(mlog); coutafd:用户名:mlog.logname进程 id:mlog.pid 登录时间mlog.logintime 退出时间 mlog.logouttime在线时间:mlog.durationsendl; if(i=10) break; close(afd); coutthis recv is overafd=
60、afd; void productthread: start() pthread_create( 4.2.2数据存储模块 图 4-12datasavethread 类图 datasavethread 成员变量的说明如表 4-20 所示: 表 4-20 datasavethread 成员变量说明 成员变量定义成员变量说明 pthread_t threadid 标识一个线程对象 logdao logdao 向数据库中存储数据的对象 datasavethread 成员函数说明: run 方法如表 4-21 所示: 表 4-21 run 定义方法 方法原型 public void run( ) 方法功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林艺术学院《音乐剧鉴赏与实践Ⅰ》2021-2022学年第一学期期末试卷
- 吉林艺术学院《色彩基础II》2021-2022学年第一学期期末试卷
- 夫妻公司的解散协议书范本范本
- 2024年供货环保协议书模板
- 2024年大宗贸易合作共赢协议书模板
- 相桥书院车位转让协议书范文
- 吉林师范大学《网球教学与训练Ⅰ》2021-2022学年第一学期期末试卷
- 整车零配件收购协议书范文范本
- 教育软件开发具体流程及管理规范
- 移动医疗服务护理团队配置方案
- 城市轨道交通概论PPT完整全套教学课件
- 呼吸机相关性肺炎诊断、预防和治疗指南(2023年)
- 《红星照耀中国》PPT只是分享
- 成年人健康自我管理能力测评量表
- 《苏城有南园北园二处》2013年浙江宁波中考文言文阅读真题(含答案与翻译)
- 船舶油漆涂装检验协议(中英文)
- 牧童笛的基础知识与演奏技能 牧童笛的基础知识乐器的种类、选择和演奏姿势、注意事项
- 六年级上册数学期中试卷及答案
- 社区护理学(山东联盟)知到章节答案智慧树2023年山东第一医科大学
- 六年级写自己典型事例300字范文(6篇)
- 《马克思主义基本原理》绪论 马克思主义基本原理概论
评论
0/150
提交评论