Linu课程设计报告书.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

姓名:学号:班级:专业:指导老师:

姓名:

学号:班级:专业:

指导老师:

提交日期:2013年06月14日

计课程设计A报告书

1、实验项目目的

《Linux 操作系统课程设计B》是一门在课程《Linux 操作系统与程序设计B》后独立开设的实验课程。这一门实验课程的开设目的是为了通过学生独立完成一个基于Linux 平台的较大型应用程序,巩固课堂上学到的Linux平台上的编程规范、技术和技巧,培养学生的编写较大型程序的能力和提高学生综合应用素质。

本课程设计实验主要围绕Linux 平台上主流的基础技术展开,这些技术包括:Linux 的进程、线程通信和同步技术;socket 网络通信技术等,这些技术可以集中体现并应用在并发程序设计中。通过并发程序的设计与开发,培养学生底层软件开发的能力,并为将来从事UNIX/Linux 平台开发、嵌入式开发等相对高端的软件开发工作打下基础。

2、实验项目的功能及模块划分

本软件是一个Linux 下基于socket 的聊天室程序,能让局域网内的用户通过该软件进行简单的文字通信。在此基础上增加了

聊天室成员之间的发送私聊信息;

当新的成员加入后能自动收取最近一段时间内的聊天上下文;用户能够查看历史聊天记录;

软件界面基于Qt实现,图形化界面方便用户操作。主要模块划分:

服务端:

数据包发送和接受模块,聊天记录数据库读写模块,数据包处理模块,聊天记录查询模块

客户端:

数据包发送和接受模块,数据包处理模块,聊天记录查询模块,用户界面与展示模块

3、设计与实现

本系统采用CS架构,服务端采用固定的端口通信,每个客户端动态设置端口。客户端启动后向服务端告知自己所使用的端口号,以便可以双向通信,同时服务器负责为每个客户端分配一个唯一的ID(服务器的ID为1)

服务端初始化服务端初始化解析数据包接受数据包

服务端初始化

服务端初始化

解析数据包

接受数据包

接受数据包

解析数据包

Soceket通信

服务端数据处

发送数据(可

选)

发送数据(可

选)

客户端数据处

通知界面线程更

新和显示数据

客户端或用户

主动发送消息

通知界面线程更新

和显示数据

数据包通用格式定义如下#defineMAX_UDP_SIZE1000structudp_packet{

inttype;

intsenderId;longsize;

charcontent[MAX_UDP_SIZE];

};

type: 表示该数据包的类型,直接决定content 字段的含义senderId:该数据包的发送者的ID,

size:整个数据包的数据长度

content:数据包的内容,其数据格式由type决定。

服务器和客户端接受到数据包后,根据type字段的值来解析content 字段的数据,从而作出正确的处理和响应。

所有的数据包类型以及对应的content 字段的数据结构全部定义在define.h 文件中

由上图可以看出,服务器和客户端程序在总体结构上相似。服务器和客

户端的全部功在数据处理模块中实现,这也是整个程序的核心之处

由于数据包的接受在单独的线程中完成,而界面采用Qt实现。因此在接受线程中采用QCoreApplication::postEvent() 方法向界面线程发送通知事件,在界面窗口中通过重载customEvent() 方法响应该通知,然后从Server中获取数据并显示。整个过程中涉及到线程同步和多线程安全问题,觉采用信号量和互斥量解决。

4文件操作

聊天记录的保存是通过文件的操作实现的具体代码

voidChatClient::saveRecord(){saveRecords(chatRecords.txt);

}

voidChatClient::saveRecords(constQStringfileName){QFilefile(fileName);

if(!file.open(QFile::WriteOnly|QFile::Text)){QMessageBox::warning(this,tr(Application),

tr(Cannotwritefile%1:\n%2.)

.arg(fileName).arg(file.errorString()));

return;

}

QTextStreamout(file);

outchatBox-toPlainText();

}

5、测试与调试

I ^--client |

骈天室IP: 端口:C55二)畔:(

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档