当前位置:无忧公文网 >范文大全 > 征文 > 基于C/S架构的QT局域网通信工具设计

基于C/S架构的QT局域网通信工具设计

时间:2022-04-04 09:58:21 浏览次数:

摘要:随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流变得更加方便。聊天工具作为互联网中运用最为广泛的通信工具之一,如今都已被广大网民接受。很多人都使用过局域网即时通讯软件,局域网即时通讯工具发展到现在已经具有了很多功能:有文字聊天、文件、文件夹传输的基本功能,也有密封、加锁等较为复杂的功能。

关键词:局域网;即时通信;套接字;QT、TCP/IP

中图分类号:TP393.1 文献标识码:A 文章编号:1007-9599 (2012) 21-0000-02

1 系统概述

Qt局域网通信工具是Windows环境下的一款即时通信工具,与Windows下的飞鹆传书功能相似。该款工具可用于公司内部员工之间进行信息交换,如文件传输、信息广播、即时通信等功能,让员工可以通过公司内部网络实现自我管理,提高了整体运作效能。

本系统采用基于Socket的局域网通信工具的设计与实现的方法。基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。

基于Socket的局域网聊天工具很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。

基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。

2 需求分析

聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登陆统一的聊天服务器。在基于Socket的聊天系统中,主要有两种角色:服务器和客户端,不同的客户端登陆集中式的服务器,通过服务器将一个客户端发出的信息推送到其他所有客户端。基于Socket的聊天系统最早实现是使用网页刷新方式,通过客户端不断地自动刷新,服务器端整个页面内容下载到客户端显示,这种方式的聊天速度慢,而且有刷屏现象,很快被更新的聊天技术所替代。聊天系统在客户端和服务器之间主要传送的是文字信息,服务器端只需要把最近的文字信息推送到客户端,这样减少了网络传输内容,节省了网络传输的时间,无疑提高了聊天速度。这种“推”技术是目前基于Socket聊天系统的主要实现技术。

在基于Socket的聊天系统,客户端和服务器必须保持随时随地的连接。这有别于普通Web浏览的连接方式。在使用浏览器访问服务器时,先由客户端发出HTTP协议,然后服务器响应处理这个客户端的响应,再返回处理结果;请求(Request)和响应(Response)是一种一对一的前后因果关系。而在基于Socket的聊天系统中,客户端发出聊天信息的同时,客户端也在接受服务器发送过来的其他人的聊天信息,因此,请求和响应不存在那种前后对应关系,是两种分别独立进行的进程。因为服务器任何时候都可能发送信息到客户端,因此,客户端和服务器一旦建立连接,必须能让服务器在以后发送中寻找定位到这个连接。局域网聊天系统使该系统的用户能够通过客户端登入到该系统,然后直接与系统交互。

3 体系结构设计

通常的通信工具,都采用客户机/服务器(C/S)体系结构,C/S结构是这样的一种结构:它包括一个客户机(或前端),一个服务器(或称后端),客户机的作用是访问和处理远程服务器上的数据,服务器的作用是接收和处理客户机的数据请求。有时,可能有多个客户向同一个服务器同时请求服务,这就需要服务器决定怎样处理这些请求。Client/Server结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。另外它的服务器端还可以将信息集中起来,任何客户机都可以通过访问服务器而获得所需的信息。Client/Server模型最终可归结为一种“请求/应答”关系。一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答。

4 功能模块划分

4.1 其中主线程模块完成对网络的初始化,然后启动两个子线程:服务端监听线程以及网络扫描模块线程,然后由网络扫描模块得到当前的网络用户分布情况,并填充相关的数据结构,然后生成用户列表界面显示给用户。

4.2 通信模块又包括两个子模块:数据接收模块和数据发送模块,这两个模块都由系统定义的网络事件来触发。

4.3 输入/输出模块用来响应用户双击用户列表的某一项要准备发送信息时的消息,以及当系统接收到某个网络用户发送来的消息,要将其显示给用户的时候。

4.4 网络扫描模块是由主线程模块启动,进行网络扫描,确定哪些用户当前处于可到达状态,以及哪些可到达状态的用户安装有相应的通信软件,并启动之可以与之进行通信。

5 开发技术

5.1 WINDOWS SOCKETS网络编程接口

选定WINDOWS平台开发网络通信程序,可以选择WINDOWS的SOCKETS编程接口,Windows Sockets是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Windows sockets无疑是我们进行网络编程的利器。所有的Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作

5.2 TCP/IP协议、TCP协议

网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。TCP(Transmission Control Protocol,传输控制协议)是一种面对连接和数据流的可靠传输协议。它是许多高层应用协议的基础。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,因此对可靠性要求高的数据通信系统往往使用TCP协议传输数据,但在正式收发数据前,通信双方必须建立连接。

QT提供了QTcpSocket类和QTcpServer类用于编写TCP客户端和服务器应用程序。QTcpSocket类提供了TCP协议的通用接口,可以用来实现其他标准协议。

首先启动服务器,稍后的某个时刻启动客户端,它与此服务器经过三次握手后建立连接。此后的一段时间内,客户端向服务器发送一个请求,服务器处理这个请求,并且给客户端发回一个响应。这个过程一直持续下去,直到客户端给服务器发一个文件结束符,并关闭客户端连接,接着服务器也关闭服务端的连接,结束运行或等待一个新的客户端连接。

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

UDP与TCP位于同一层,但对于数据包的顺序错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务.

TCP和UDP服务通常有一个客户/服务器的关系。两个系统间的多重连接是这样相互确认并协调一致的,TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:

源IP地址 发送包的IP地址。

目的IP地址 接收包的IP地址。

源端口 源系统上的连接的端口。

目的端口 目的系统上的连接的端口。

端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

5.3 P2P

在P2P 系统中,每一个Peer 都是平等的参与者,承担服务使用者和服务提供者两个角色。资源的所有权和控制权被分散到网络的每一个节点中。服务使用者和服务提供者之间进行直接通信,可充分利用网络带宽,减少网络的拥塞状况,使得资源的有效利用率大大提高(包括各种计算资源和存储资源)。同时由于没有中央节点的集中控制,系统的伸缩性较强,也能避免单点故障,提高系统的容错性能。但由于P2P网络的分散性、自治性、动态性等特点,造成了某些情况下Peer的访问结果是不可预见的,例如,一个请求可能得不到任何应答消息的反馈。通常情况下图形用户界面应用程序是一个可执行线程,并且一次执行一个操作。如果用户在单线程的应用程序中从用户界面中调用一个耗时的操作,当这个操作被执行的时候,用户界面通常会冻结。当遇到这种问题时,就要考虑使用多线程了。

5.4 多线程编程

在一个多线程的QT程序中,这个图形用户界面在它自己的线程中运行,并且处理会发生在一个或多个其他线程中。这样做之后,即使处在比较强烈的处理中,应用程序也会响应图形用户界面。多线程的另外一个好处是在多处理器的机器中,不同的线程可以在不同的处理器中同步执行,这样可以获得更好的性能。多线程具有以下两点优势:

(1)可提高应用程序的响应速度。这对开发图形界面的程序尤其重要,当一个操作耗时很长时,整个系统都会等待这个操作。而使用多线程技术可将好耗时长的操作置于一个新的线程,从而避免上述问题。

(2)使多CPU系统更加有效。当线程数不大于CPU数目时,操作系统可以调度不同的线程运行于不同的CPU上。

多线程,在QT中使用线程十分简单,只需要继承QThread类并重新实现其run()函数,只需在run()函数中填写所需代码,然后创建一个实例,并以QThread::start()函数启动这个实例即可。这样run()函数中的功能代码就运行在一个独立的线程中了。

推荐访问: 局域网 架构 通信 工具 设计