




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学华夏学院专业综合课程设计报告书项 目 名 称基于嵌入式linux的QQ聊天系统设计课程设计总评成绩 学生姓名、学 号 学 生 专 业 班级 自动化1113 指 导 教 师 姓名 课程设计起止日期 2014.12.52014.12.31 课程设计基本要求专业综合课程设计是十分重要的实践教学环节,通过专业综合课程设计,培养学生综合运用所学理论知识和专业技能,以项目为导向解决工程领域的实际问题。课程设计报告是科学论文写作的基础,报告可以以小论文的形式提交。 1. 专业综合课程设计内容包括项目设计方案论证、项目设计与结果分析、答辩等环节,每个环节都应有一定的考核要求和考核成绩。2. 项目设计方案论证主要包括可行性设计方案论证、从可行性方案中确定最佳方案,项目设计要求按选择的方案进行硬件设计或软件编程。4. 项目设计结果分析主要包括项目设计与制作结果的工艺水平,项目测试性能指标的正确性和完整性,软件运行情况和效果分析,故障或错误原因的分析和处理方法。 5. 学生在课程设计过程中应认真阅读与本课程设计项目相关的文献,培养自己的阅读兴趣和习惯,借以启发自己的思维,提高综合分和理解能力。文献阅读摘要记录于课程设计报告书中。6. 答辩是课程设计中十分重要的环节,由课程设计指导教师向答辩学生提出23个问题,通过答辩可进一步了解学生对课程设计中理论知识和实际技能掌握的程度,以及对问题的理解、分析和判断能力。7.学生应在课程设计周内认真参加项目设计的各个环节,按时完成课程设计报告书。课程设计报告书是实践教学水平评估的重要资料,应按课程、班级集成存档交实验室统一管理。课程设计任务书学生姓名: 黄标 专业班级: 自动化113 指导教师: 苏明霞 工作单位:武汉理工大学华夏学院 题 目: 基于嵌入式linux的QQ聊天系统设计 基础条件:1. 软帝嵌入式ARM9开发教学设备;2. PC机及相关应用软件;要求完成的主要任务:1. 了解TCP方面socket编程,linux下QT编程。2. 实现客户端与服务器端的聊天功能。3. 撰写课程设计说明书。4. 课程设计说明书要求:引言、设计要求、系统结构、原理设计、各个模块的设计与实现、软件设计、调试过程、体会及总结、参考文献、源程序。说明书使用A4纸打印或手写。时间安排:第14周 下达课程设计任务书和日程安排,根据任务书查找资料,了解触摸屏工作原理;第15周 熟悉linux的QT下C+程序设计;熟悉linux移植过程。第16周 程序的编写和调试; 第17周 结果分析整理、撰写课程设计报告,验收和答辩。指导教师签名: 2014 年 12 月 5 日系主任(或责任教师)签名: 2014 年 12月 5 日摘 要(摘要200字左右,采用5号字,楷体;摘要要求写“目的、方法、结果、结论”) 本系统建立在嵌入式系统网络平台上,系统的设计上瘾了面向对象技术和面向对象的设计原则。系统采用C/S与B/S结合的结构,客户端与客户端一级客户端与服务端之间通过Socket传递消息。使用嵌入式C+语言编写,开发工具采用linux下的QT环境。 服务器设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大 增强了程序对服务器资源的利用。在linux下编写并调试服务器端程序与客户端程序,实现了客户、服务器之间的连接和通信。关键字:linux;qt;tcp/ip;聊天1、 设计的总体目的与功能1、聊天程序的基本要求(1)、在QT(或miniGUI)编写聊天程序,交叉编译后下载到目标机,可实现两台目标机可发送文本聊天。(2)、QT(或miniGUI)界面设计至少包括“发送”,“重置”两个按钮,要求必须把目标机的硬件键盘映射到QT设计的软件界面中,实现软件按钮的功能。2、需实现的主要功能(1) 客户端输入服务器IP和端口号。(2)服务器必须成功启动。(3)每一个客户端可以寻找服务器,并且与服务器建立连接。(4)客户端和服务器可以实现通信。(5)通信的内容可以显示在面板上。(6)利用QT设计界面,并下载到ARM2410上面二、方案论证(可行性方案、系统实现方案)1、QT设计QT设计编写和调试阶段使用周立功ARM2410箱子提供的QTforPC编译器,运行测试阶段使用QTforARM编译器。使用QTforPC阶段编译程序的步骤如下(以编译hello.cpp程序为例):(1) 进入/x86-qtopia目录,运行set-env脚本,设置环境变量。$.set-env(2) 进入hello目录,然后用progen工具生成工程文件。 $cdhello $vihello.cpp$(3) 使用tmake工具,生成hello工程的Makefile文件。 $ tmake-oM(4) 修改Makefile文件,在LIBS变量中增加需要用到的库,然后输入 make命令编译。 LIBS=$(SUBLIBS)-L$(QTDIR)/lib-lqte-lm-lstdc+$make(5) 启动虚拟控制台,运行hello程序(主机须启动帧缓冲,必须能够 访问/dev/fb0)。 $cd/zylinux/x86-qtopia $.set-env $cdhello $./helloqws 如果要将Hello程序发布到ARM2410上运行,还需进行以下工作:(6)进入/zylinux/arm-qtopia目录,并将hello工程复制到当前目录下。 $cd/zylinux/arm-qtopia $cpav/zylinux/x86-qtopia/hello(7)运行当前目录下的set-env文件,重新设置环境变量,进入hello目录,使用tmake工具,重新生成Makefile文件。 $.set-env $cdhello $tmake-oM(8)按照步骤(4)的方法修改包含库,编译,得到可执行文件hello,将hello文件添加到文件系统中,更新文件系统。(9)插入USB鼠标和USB键盘,启动ARM2410。启动Qtopia的终端,运行hello程序。利用同样的编译方法,客户端QT程序进行编译和调试。2、客户端QT界面设计客户端QT需要以下基本组件:(1)两个QEditLine,一个用于输入服务器IP地址(可读可写),另一个用于输入服务器端口号(可读可写)。(2)三个按钮,一个用于连接服务器,另一个用于发送消息,最后一个用于清空发送区域数据。(3)四个标签,用于显示不用组件的内容。(4)两个MultiLineedit,一个用于显示通信内容(只读),一个作为发送区域(可读可写)。3、服务器端和客户端的数据传输方式服务器端和客户端的数据是用TCP套接字来传输的。IP地址表示Internet上的计算机,端口号标识正在计算机运行的进程。端口号与IP地址的组合得出一个网络套接字。客户端使用linuxC函数socket建立到服务器的套接字连接。当套接字连接socket建立后,可以利用linuxC语言中的send函数和recv函数来实现简单的发送和接收消息。4、服务器端功能设计由于时间有限,服务器并没有用QT来编写界面,只是实现一个简单的控制程序。服务器主要实现有:(1)创建套接字(2)对套接字、IP地址和端口号进行绑定(3)进行监听(4)等待客户端的连接(5)对客户端接收和发送数据5客户端功能设计客户端使用QT设计界面,客户端实现的功能如下:(1) 创建套接字 (2)连接服务器 (3)与服务器通信6详细设计(1)、功能分析和描述:聊天工具包括两大功能模块:客户端和服务器端。具体实现的功能创建套接字、连接通信、接收数据显示和发送数据。(2)、客户端功能模块 连接服务器 连接服务器之前需要解析服务器地址、创建套接字、设置sockaddr_in 结构体中相关参数。 发送消息功能 连接功能是开始聊天前必须进行的步骤连接成功之后就可以进行发送消息了。发送消息功能流程图如图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 QLabel( IP Addr:, this); grid-addWidget( label1, 0, 0 ); edit_ip = new QLineEdit(this); edit_ip-setText(); 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); grid-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( Send Area:, this); grid-addWidget(label4, 4, 0); multiedit_send = new QMultiLineEdit(this); grid-addWidget(multiedit_send,4,1); QPushButton *button_send = new QPushButton(Send, this); /*add the send button*/ grid-addWidget( button_send, 5, 0); connect(button_send,SIGNAL(clicked(),this, SLOT(ButtonSend(); QPushButton *button_clear = new QPushButton(Clear, this); /*add the clear button*/ grid-addWidget(button_clear,5,1); connect(button_clear,SIGNAL(clicked(),this,SLOT(ButtonClear(); EditDemo:EditDemo() if(socket_flag = 1)/*if create socket success*/ close(sockfd); /*Close the socket*/ printf(Close the socketn); 创建套接字 void EditDemo:CreateSocket(void) /*地址解析函数*/ host = gethostbyname(edit_ip-text() /*创建socket*/ sockfd = socket(AF_INET,SOCK_STREAM,0); /*设置sockaddr_in 结构体中相关参数*/ serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(atoi(edit_port-text(); serv_addr.sin_addr = *(struct in_addr *)host-h_addr); bzero(serv_addr.sin_zero), 8); 创建线程 void *task(void *arg) int recvbytes = 0; char bufBUFFER_SIZE= 0; arg = arg; while(1) if(recvbytes = recv(sockfd, buf, BUFFER_SIZE, 0) 0) multiedit_contract-append(Server said: +(QString)buf); void CreateThread(void) int result = 0; result = pthread_create(thread1, NULL, task, (void *)0); /*Create Thread*/ (2)、服务器端代码 #define PORT 4321 #define BUFFER_SIZE 1024 #define MAX_QUE_CONN_NM 5 int main() struct sockaddr_in server_sockaddr, client_sockaddr; int sin_size, recvbytes; unsigned int sendbytes = 0; int sockfd, client_fd; char bufBUFFER_SIZE; /*建立socket连接*/ sockfd = socket(AF_INET,SOCK_STREAM,0) /*设置sockaddr_in 结构体中相关参数*/ server_sockaddr.sin_family = AF_INET; server_sockaddr.sin_port = htons(PORT); server_sockaddr.sin_addr.s_addr = INADDR_ANY; bzero(server_sockaddr.sin_zero), 8); int i = 1;/* 使得重复使用本地地址与套接字进行绑定 */ setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, i, sizeof(i); /*绑定函数bind*/ ibind(sockfd, (struct sockaddr *)server_sockaddr, sizeof(struct sockaddr); /*调用listen函数*/ listen(sockfd, MAX_QUE_CONN_NM); /*调用accept函数等待客户端的连接*/ client_fd = accept(sockfd, (struct sockaddr *)client_sockaddr, sin_size); /*调用recv函数接收客户端的请求*/ while(1) memset(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度KTV跨区域经营合作协议
- 幼儿健康生活教案
- 2025版航空航天零部件采购合同及供应链管理协议
- 二零二五年度汽车维修保养服务合同协议
- 二零二五年度数字化转型SaaS平台服务合同
- 二零二五“魔百和”家庭网络服务与增值业务合作协议
- 二零二五年度新型拆除工程居间服务协议
- 二零二五阿拉尔经济技术开发区智慧城市建设项目合同
- 2025版市政工程采购保密协议示范文本
- 二零二五年度金融风险评估保密合同书(金融机构)
- 2024年江苏省支付清算知识竞赛备考试题库(含答案)
- 项目部领导带班值班安排表
- 林长制公示牌施工方案
- 咯血病人护理常规
- 2025年江苏常州公交集团招聘笔试参考题库含答案解析
- 儿童肠梗阻的护理查房
- 16能源计量器具配备及计量采集点网络图(范例)
- 智能影像:AI在视频艺术中的新探索
- 质量经理述职报告
- 《VPN技术及应用》课件
- 风险传导机制研究
评论
0/150
提交评论