嵌入综合课程设计.docx
《嵌入综合课程设计.docx》由会员分享,可在线阅读,更多相关《嵌入综合课程设计.docx(32页珍藏版)》请在冰豆网上搜索。
嵌入综合课程设计
课程设计报告
课程名称嵌入式综合课程设计
专业:
计算机科学与技术
班级:
120601
姓名:
何燕
学号:
指导教师:
赵世峰
成绩:
2015年12月7日
目录
第一章前言...................................................................................
(1)
一、引言...........................................................................................................
(1)
1.1开发意义...................................................................................................
(1)
1.2开发环境与运行环境.............................................................................
(1)
第二章系统需求分析......................................................................
(1)
一、聊天程序的基本原理...................................................................................
(1)
1.1条件与限制...............................................................................................
(1)
1.2设计思路和可行性分析.............................................................................
(2)
1.3聊天平台的设计思想.................................................................................
(2)
1.4信号与槽机制...........................................................................................
(2)
二、关键技术........................................................................................................
(2)
2.1相关协议...................................................................................................
(2)
2.1.1UDP协议...........................................................................................
(2)
2.1.2TCP协议...........................................................................................(3)
2.1.3TCP协议建立连接...........................................................................(3)
2.1.4TCP协议断开连接...........................................................................(4)
2.2TCP与UDP区别.......................................................................................(5)
第三章总体设计..............................................................................(5)
一、开发环境的配置...........................................................................................(5)
1.1Windows下QtCreator5.3.0环境构建....................(5)
二、基于TCP的程序编写流程图....................................................................(7)
三、界面设计........................................................................................................(8)
3.1服务器设计.....................................................................................................(8)
3.1客户端设计.....................................................................................................(9)
第四章详细设计..............................................................................(9)
一、各个模块的具体实现过程...............................................................................(9)
1.1主界面设计.....................................................................................................(9)
1.1.1服务器端设计........................................................................................(9)
1.1.2客户端端设计......................................................................................(11)
2.1功能设计........................................................................................................(14)
2.1.1服务器端设计......................................................................................(14)
2.1.2客户端端设计......................................................................................(17)
二、设计结果.........................................................................................................(20)
第五章设计总结............................................................................(22)
一、心得体会...................................................................................................,.....(22)
题目:
基于Qt简单局域网聊天室
第一章前言
1、引言
1.1开发意义
随着网络信息时代的来临,Internet应用越来越广泛,人们越来越习惯于在网上获取和交流信息。
网络聊天的诞生,成为时下极为流行的一种沟通方式,特别是在现代高新技术推动下,在线聊天呈现出良好的势头和前景。
据调查显示,80%以上的人上网都会打开聊天工具来聊天,而几乎每一个年轻人都会去聊天,使用网上聊天已经成为现代年轻人一种新的交往方式。
聊天室更适合于陌生人之间进行较为主观、感性化的讨论,还可以用各种表情表达你的喜怒哀乐。
所以大部分人进入聊天室,它会给人一个完全自由的聊天世界。
而随着软件开发在中国的快速崛起,使得越来越多的年轻有志向为软件事业奉献的人加入到软件开发的大家庭,而当前QT采用C++语言作为开发语言拥有着广泛的开发基础,QT使用C++开发,其运行效率可以得到保证,QT已经在Windows、Linux和EmbbededLinux上成功的推广,QT开始在S60和WinCE平台上开始支持,并向开发者提供相关SDK和样例。
QT是一个开源项目,即使在企业级开发上也不用承受太大的成本。
QT为广大开发者提供了免费而又友好的集成开发环境。
QT平台开发起来简单,属于开源项目,开发者学习方便。
QT拥有友好丰富的界面库。
基于以上这些优点,用QT实现一个局域网下的简易聊天室,具有很重要的研究学习价值。
1.2开发环境与运行环境
1.2.1开发环境说明
(1)编程语言:
C++
(2)操作系统:
Windows764位
(3)开发平台:
QtCreator
1.2.2运行环境说明
(1)CPU:
COREi5
(2)内存:
4GB
(3)硬盘:
500GB
(4)操作系统:
Windows764位
第2章系统需求分析
1、聊天程序的基本原理
1.1条件与限制
本系统主要为普通聊天系统,主要是局域网内成员使用,要求界面简洁,操作简单,以处理事务为核心,保证程序的可靠性。
本系统处理数据量有限,适用于局域网用户,但性能良好,能满足局域网成员的基本要求。
可以应对各种由于系统产生的错误,比如信息发送失败,不能接收信息等,要求尽可能多的预防此类事件的发生,并准备好应对措施和向用户提供提示信息。
要保证程序有一定的容错性,当用户进行非法操作或系统本身出现错误时要能合理的方式退出程序。
1.2设计思路和可行性分析
本软件采用服务器和客户端的形式,服务器负责监听客户端和接收客户端发送过来的消息,并显示在界面上。
客户端则向服务器发送信息,在本地呈现的同时,通过网络实时发往服务器。
用户在服务器上也可以看见客户端发送的消息,并获取最新客户端发送的消息。
网络编程技术的成熟和界面设计技术使得客户端与服务端通信的设计成为可能,而且此软件通过设置IP使聊天通信更为方便。
1.3聊天平台的设计思想
本系统采用服务器和客户端的形式。
服务器主要模拟服务器的控制端,来对客户端的各种状态进行监听。
可以通过网络向客户端发送信息,并接收客户端传来的信息,提供用户参考。
客户端主要通过IP链接服务器,客户端在显示自己状态的同时,通过网络实时将自己的状态发送给服务器端。
1.4信号与槽机制
信号:
当对象改变其状态时,信号就由该对象发射(emit)出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。
这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用。
槽:
用于接收信号,而且槽只是普通的对象成员函数。
一个槽并不知道是否有任何信号与自己相连接,而且对象并不了解具体的通信机制。
信号与槽的连接:
所有从QObject或其子类(Qwidget)派生的类都能够包含信号与槽。
因为信号与槽的连接是通过QObject的connect()成员函数实现的。
2、关键技术
2.1相关协议
2.1.1UDP协议
UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI(OpenSystemInterconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC768是UDP的正式规范。
UDP在IP报文的协议号是17。
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。
在OSI模型中,在第四层——传输层,处于IP协议的上一层。
UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
UDP用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。
根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据包的形式。
一个典型的数据包就是一个二进制数据的传输单位。
每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
2.1.2TCP协议
TCP(TransmissionControlProtocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。
在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。
在因特网协议族(Internetprotocolsuite)中,TCP层是位于IP层之上,应用层之下的中间层。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。
之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。
TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。
然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。
TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
2.1.3TCP的建立过程(三次握手)
所谓三次握手(Three-WayHandshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
具体过程为:
第一次握手:
建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:
服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
在socket编程中,这一过程由客户端执行connect来触发,整个流程如图2—1所示:
图2—1TCP协议三次握手过程
2.1.4TC断开连接的过程(四次挥手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。
收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
具体过程:
(1)第一次挥手:
Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:
Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:
Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:
Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
之所以建立连接三次握手和断开连接四次握手,是因为服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,当接收到对方的FIN报文时,仅仅表示对方不在发送数据了但是还能接收数据,己方也未必全部数据都发送给了对方,所以己方可以立即关闭,也可以发送一些数据给对方后,在发送FIN报文给对方来表示同意现在的关闭连接,因此己方ACK和FIN一般都会分开发送。
TCP断开连接整个流程如图2—2所示:
图2—2TCP断开的四次挥手过程
2.2TCP与UDP的区别
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。
当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。
TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。
由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
第3章总体设计
1、开发环境的配置
1.1Windows下QtCreator5.3.0环境构建
图3—1安装QtCreator后菜单栏
图3—2QtCreator工具选项
图3—3QtCreator构建和运行中QtVersions
图3—4QtCreator构建和运行中编译器
图3—5QtCreator构建和运行中编译器添加结果
2、基于TCP程序的编写流程图
服务器主要模拟服务器的控制端,来对客户端的各种状态进行监听。
可以通过网络向客户端发送信息,并接收客户端传来的信息,提供用户参考。
客户端主要通过IP链接服务器,客户端在显示自己状态的同时,通过网络实时将自己的状态发送给服务器端。
图3—6程序流程图
3、界面设计
3.1服务端的设计
图3—7服务器端界面
服务器主要模拟服务器的控制端,来对客户端的各种状态进行监听。
可以通过网络向客户端发送信息,并接收客户端传来的信息,提供用户参考。
在点击“创建聊天室”控件时,使得服务器被打开,在服务器端的程序中指定了端口号,客户端程序的端口号和服务器端的端口号一样,这样就便于客户端和服务器相互连通。
3.2客户端的设计
图3—8客户端端界面
客户端主要通过IP链接服务器,客户端在显示自己状态的同时,通过网络实时将自己的状态发送给服务器端。
客户端在完成用户名和IP地址后,点击进入聊天室后,便可以发送自己愿意发送的信息同时可以接受别的在线用户的信息。
第4章详细设计
1、各个模块的具体实现过程
1.1主界面设计
1.1.1服务器端设计
在工程TcpServer中,我们需要包含6个文件,分别为tcpserver.h和tcpserver.cpp、tcpclientsocket.h和tcpclientsocket.cpp以及server.h和server.cpp。
每个文件都实现不同的功能。
(1)头文件“tcpserver.h”中声明了所需要的各种控件,TcpServer继承自QDialog,实现了服务器端的对话框显示与控制。
具体代码如下:
#ifndefTCPSERVER_H
#defineTCPSERVER_H
#include
#include
#include
#include
#include
#include
#include"server.h"
classTcpServer:
publicQDialog
{
Q_OBJECT
public:
TcpServer(QWidget*parent=0,Qt:
:
WindowFlagsf=0);
~TcpServer();
private:
QListWidget*ContentListWidget;
QLabel*PortLabel;
QLineEdit*PortLineEdit;
QPushButton*CreateBtn;
QGridLayout*mainLayout;
intport;
Server*server;
publicslots:
voidslotCreateServer();
voidupdateServer(QString,int);
};
#endif//TCPSERVER_H
(2)在源文件“tcpserver.cpp”中,TcpServer类的构造函数主要实现窗体各个控件的创建、布局等,具体实现代码如下:
#include"tcpserver.h"
TcpServer:
:
TcpServer(QWidget*parent,Qt:
:
WindowFlagsf)
:
QDialog(parent,f)
{
setWindowTitle(tr("TCPServer"));
ContentListWidget=newQListWidget;
PortLabel=newQLabel(tr("端口号:
"));
PortLineEdit=newQLineEdit;
CreateBtn=newQPushButton(tr("创建聊天室"));
mainLayout=newQGridLayout(this);