《基于嵌入式linux的QQ聊天系统设计》由会员分享,可在线阅读,更多相关《基于嵌入式linux的QQ聊天系统设计(18页珍藏版)》请在金锄头文库上搜索。
1、各专业全套优秀毕业设计图纸武汉理工大学华夏学院专 业 综 合 课 程 设 计 报 告 书项 目 名 称基于嵌入式 linux 的 QQ 聊天系 统设计课程设计总评成绩 学生姓名、学 号 学 生 专 业 班级 自动化 1113 指 导 教 师 姓名 课程设计起止日期 2014.12.52014.12.31 课程设计基本要求专业综合课程设计是十分重要的实践教学环节,通过专业综合课程设计,培养学生综合运用所学理论知识和专业技能,以项目为导向解决工程领域的实际问题。课程设计报告是科学论文写作的基础,报告可以以小论文的形式提交。 1. 专业综合课程设计内容包括项目设计方案论证、项目设计与结果分析、答辩等
2、环节,每个环节都应有一定的考核要求和考核成绩。2. 项目设计方案论证主要包括可行性设计方案论证、从可行性方案中确定最佳方案,项目设计要求按选择的方案进行硬件设计或软件编程。4. 项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,软件运行情况和效果分析,故障或错误原因的分析和处理方法。 5. 学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。文献阅读摘要记录于课程设计报告书中。6. 答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出23 个问题,通过答辩可进一步了解学生
3、对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书。课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。课程设计任务书学生姓名: 黄标 专业班级: 自动化 113 指导教师: 苏明霞 工作单位:武汉理工大学华夏学院 题 目: 基于嵌入式 linux 的 QQ 聊天系统设计 基础条件:1. 软帝嵌入式 ARM9 开发教学设备;2. PC 机及相关应用软件;要求完成的主要任务:1. 了解 TCP 方面 socket 编程,linux 下 QT 编程。2. 实现客户端与
4、服务器端的聊天功能。3. 撰写课程设计说明书。4. 课程设计说明书要求:引言、设计要求、系统结构、原理设计、各个模块的设计与实现、软件设计、调试过程、体会及总结、参考文献、源程序。说明书使用 A4 纸打印或手写。时间安排:第 14 周 下达课程设计任务书和日程安排,根据任务书查找资料,了解触摸屏工作原理;第 15 周 熟悉 linux 的 QT 下 C+程序设计;熟悉 linux 移植过程。第 16 周 程序的编写和调试; 第 17 周 结果分析整理、撰写课程设计报告,验收和答辩。指导教师签名: 2014 年 12 月 5 日系主任(或责任教师)签名: 2014 年 12 月 5 日摘 要(摘
5、要 200 字左右,采用 5 号字,楷体;摘要要求写“目的、方法、结果、结论”)本系统建立在嵌入式系统网络平台上,系统的设计上瘾了面向对象技术和面向对象的设计原则。系统采用 C/S 与 B/S 结合的结构,客户端与客户端一级客户端与服务端之间通过 Socket 传递消息。使用嵌入式 C+语言编写,开发工具采用 linux 下的 QT 环境。服务器设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大 增强了程序对服务器资源的利用。在 linux 下编写并调试服务器端程序与客户端程序,实现了客户、服务器之间的连接和通信。关键字:linux;qt;tcp
6、/ip;聊天1、设计的总体目的与功能1 、聊天程序的基本要求 (1)、在 QT(或 miniGUI)编写聊天程序,交叉编译后下载到目标机,可实现两台目标机可发送文本聊天。 (2)、QT(或 miniGUI)界面设计至少包括“发送”,“重置”两个按钮,要求必须把目标机的硬件键盘映射到 QT 设计的软件界面中,实现软件按钮的功能。 2 、需实现的主要功能 (1) 客户端输入服务器 IP 和端口号。 (2) 服务器必须成功启动。 (3) 每一个客户端可以寻找服务器,并且与服务器建立连接。 (4) 客户端和服务器可以实现通信。 (5) 通信的内容可以显示在面板上。 (6) 利用 QT 设计界面,并下载
7、到 ARM2410 上面二、方案论证(可行性方案、系统实现方案)1、 QT 设计 QT 设计编写和调试阶段使用周立功 ARM2410 箱子提供的 QT for PC 编译器,运行测试阶段使用 QT for ARM 编译器。 使用 QT for PC 阶段编译程序的步骤如下(以编译 hello.cpp 程序为例): (1)进入/x86-qtopia 目录,运行 set-env 脚本,设置环境变量。$ . set-env (2)进入 hello 目录,然后用 progen 工具生成工程文件 hello.pro。$ cd hello$ vi hello.cpp $ progen t app.t o
8、hello.pro (3)使用 tmake 工具,生成 hello 工程的 Makefile 文件。 $ tmake -o Makefile hello.pro(4)修改 Makefile 文件,在 LIBS 变量中增加需要用到的库,然后输入make 命令编译。 LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lqte -lm -lstdc+ $ make (5)启动虚拟控制台,运行 hello 程序(主机须启动帧缓冲,必须能够 访问/dev/fb0)。$ cd /zylinux/x86-qtopia $ . set-env $ cd hello $ ./hello qws
9、 如果要将 Hello 程序发布到 ARM2410 上运行,还需进行以下工作: (6)进入/zylinux/arm-qtopia 目录,并将 hello 工程复制到当前目录下。 $ cd /zylinux/arm-qtopia $ cp av /zylinux/x86-qtopia/hello (7)运行当前目录下的 set-env 文件,重新设置环境变量,进入hello 目录,使用 tmake 工具,重新生成 Makefile 文件。$ . set-env $ cd hello $ tmake -o Makefile hello.pro(8)按照步骤(4)的方法修改包含库,编译,得到可执行文
10、件 hello,将 hello 文件添加到文件系统中,更新文件系统。 (9)插入 USB 鼠标和 USB 键盘,启动 ARM2410。启动 Qtopia 的终端,运行 hello 程序。 利用同样的编译方法,客户端 QT 程序进行编译和调试。2、 客户端 QT 界面设计 客户端 QT 需要以下基本组件: (1)两个 QEditLine,一个用于输入服务器 IP 地址(可读可写),另一个用于输入服务器端口号(可读可写)。 (2)三个按钮,一个用于连接服务器,另一个用于发送消息,最后一个用于清空发送区域数据。 (3)四个标签,用于显示不用组件的内容。(4)两个 MultiLineedit,一个用于
11、显示通信内容(只读),一个作为发送区域(可读可写)。 3、服务器端和客户端的数据传输方式 服务器端和客户端的数据是用 TCP 套接字来传输的。IP 地址表示Internet 上的计算机,端口号标识正在计算机运行的进程。端口号与IP 地址的组合得出一个网络套接字。客户端使用 linux C 函数 socket建立到服务器的套接字连接。 当套接字连接 socket 建立后,可以利用 linux C 语言中的 send 函数和 recv 函数来实现简单的发送和接收消息。4、服务器端功能设计 由于时间有限,服务器并没有用 QT 来编写界面,只是实现一个简单的控制程序。服务器主要实现有: (1)创建套接
12、字 (2)对套接字、IP 地址和端口号进行绑定 (3)进行监听(4)等待客户端的连接 (5)对客户端接收和发送数据 5 客户端功能设计 客户端使用 QT 设计界面,客户端实现的功能如下: (1)创建套接字 (2)连接服务器 (3)与服务器通信6 详细设计(1)、功能分析和描述:聊天工具包括两大功能模块:客户端和服务器端。具体实现的功能创建套接字、连接通信、接收数据显示和发送数据。(2)、客户端功能模块 连接服务器 连接服务器之前需要解析服务器地址、创建套接字、设置 sockaddr_in 结构体中相关参数。发送消息功能 连接功能是开始聊天前必须进行的步骤 连接成功之后 就可以进行发送消息了。发
13、送消息功能流程图如图 2-5 所示。接收消息模块 连接成功后 就可以接收服务器发送过来的数据。 (3)、服务器功能模块服务器的设计并没有使用 QT 编写界面,服务器端实现的功能有服务器模块流程图三、硬件电路设计或软件设计1、代码实现(1)、客户端代码 QT 构造和析构函数 EditDemo:EditDemo(QWidget *parent, const char *name):QWidget(parent, name) QGridLayout *grid = new QGridLayout(this, 6, 3, 0, 0); /IP addr QLabel *label1 = new QLa
14、bel( IP Addr:, this); grid-addWidget( label1, 0, 0 ); edit_ip = new QLineEdit(this); edit_ip-setText(127.0.0.1); grid-addWidget( edit_ip, 0, 1 ); /Server Port QLabel *label2 = new QLabel( Server Port:, this); grid-addWidget( label2, 1, 0); edit_port = new QLineEdit(this); edit_port-setText(4321); gr
15、id-addWidget( edit_port, 1, 1); QPushButton *btn = new QPushButton(Connect, this); /*add the connect button*/ grid-addWidget(btn,2,1); /*add the button*/ connect(btn, SIGNAL(clicked(), this, SLOT(ButtonConnect(); /multiline input mode QLabel *label3 = new QLabel( Contract Area:, this); grid-addWidget(label3, 3, 0); multiedit_contract = new QMultiLineEdit(this); multiedit_contract-setReadOnly(1);/set read only grid-addWidget(multiedit_contract,3,1);QLabel *label4 = new QLabel