基于Qt的p2p局域网聊天和文件传输软件

更新时间:2024-01-17 03:01:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于Qt的局域网聊天和文件传输软件设计

摘 要

随着计算机网络技术的飞速发展,人们对于网络的依赖性也越来越大。通过网络的局域网通信也越来越受到人们的喜爱,比如说现在非常流行的QQ局域网通信软件就解决了人们在网络中交流的需求。

基于Qt的P2P局域网聊天和文件传输软件,是基于TCP/IP协议中的TCP和UDP协议完成的一个能够完成局域网通信和传输文件的软件,该软件实现了局域网内的通信,使用该软件作为通信和传输文件的工具,既简单又安全。

关键词:计算机网络, TCP, UDP , 文件传输;

Abstract

With the rapid development of computer network technology, people are more and more dependent on the network. Instant messaging via the Internet has become more and more popular, for example, it is now very popular QQ instant messaging software to solve the needs of people in the network communication.

Based on P2P instant chat and file transfer software is based on TCP / IP protocol in the TCP and UDP protocols to complete a to complete the instant messaging and file transfer software, the software realized the LAN communication, the use of the software as a communication and file transfer tool, which is simple and safe.

Key word:computer network, TCP, UDP , file transfer;

目 录

1 引 言 .......................................................................................................................... 1 1.1 课题背景 ............................................................................................................. 1 1.2 国内外现状 ......................................................................................................... 1 1.3本课题研究的迫切性 .......................................................................................... 1 1.4 本文的主要工作 ................................................................................................. 1 2.需求分析和开发工具 ................................................................................................. 2 2.1 需求分析 ............................................................................................................. 2 2.2 P2P的局域网聊天和文件传输软件的功能 ....................................................... 2 2.3 开发工具 ............................................................................................................. 2 2.4 TCP/UDP工作协议流程 ..................................................................................... 4 3.系统总体结构设计 ..................................................................................................... 6 3.1 基本简介 ............................................................................................................. 6 3.2 系统功能模块设计 ............................................................................................. 6 3.3 功能模块介绍 ..................................................................................................... 6 3.3.1 聊天功能模块 .............................................................................................. 6 3.3.2 文件传输模块 .............................................................................................. 7 4.功能实现 ..................................................................................................................... 9 4.1 系统设计流程 ..................................................................................................... 9 4.1.1 聊天功能的流程设计 .................................................................................. 9 4.1.2 文件传输功能系统实现 ............................................................................ 10 5 结果与分析 ............................................................................................................ 16 参考文献 ...................................................................................................................... 17

1 引 言

1.1 课题背景

网络的发展促进了通信的发中,通信的发展反过来让网络发展的更大更快,通信作为我们日常生活中不可或缺的东西,正在改变着人们的生活。比如说QQ局域网通信软件就为人们的生活和学习带来了极大的方便。但是人们有时需要和与自己同一个局域网内的用户通信而通信的内容不通过公网来保证通信的安全,防止黑客或者一些心怀不轨的人通过非法的手段获取到通信的内容。因为一旦信息泄露了就有可能带来不可估量的损失。在这种情况下,基于Qt的P2P的局域网聊天和文件传输的软件就产生了。

1.2 国内外现状

网络的普及也让一些人获得了获取了更多的信息。通过窃听,篡改,重放等攻击的手机来阻止,或者是窃取别人的有用信息,这种事在一些大型的公司里曾经就发生过。现在一些大型的公司自己会去开发适合自己公司的局域网通信软件来防止此类的安全事件出现,因此基于Qt的P2P的局域网聊天和文件传输的应用开发现在仍然受到关注。

1.3本课题研究的迫切性

基于Qt的P2P的局域网聊天和文件传输软件的实现能够帮助我们了解基于Qt的P2P 的软件的实现原理和过程,为我们以后开发一些大型的P2P的软件提供了技术上的保证。同时该软件能够用于局域网的通信和传输文件,具有一定的实际意义。

1.4 本文的主要工作

本文主要介绍了基于Qt的P2P的局域网聊天和文件传输的软件的实现原理和实现的过程,针对软件的原理和过程进行深入的讲解。同时本文可以作为基于Qt的P2P的局域网聊天和文件传输的软件的使用说明书,通过具体而详细的阐述,让大家更容易的理解基于Qt的P2P的局域网聊天和文件传输的软件的实现原理和实现的过程。

第 1 页

2 需求分析和开发工具

2.1 需求分析

由于国内外的安全现状不容乐观,人们通信的时的信息很容易会被黑获 获取,为了在局域网中安全简单的痛信,人们就开发了基于Qt的P2P的局域网通信和文件传输软件。该软件能够很好地实现在局域网内和其他人通信,从而保证了通信的安全,让人们拥有更加安全和简单的痛信环境。同时,由于该软件是使用C++语言开发,具有平台无关性。能够在不同的操作系统的平台下完成局域网通信和文件传输的功能。

2.2 P2P的局域网聊天和文件传输软件的功能

P2P的局域网聊天和文件传输软件有以下功能:

(1)局域网内点对点通信,

能够同一时间和多个人,在不同的ip和端口上实现通信

(2)简单文件传输

能够传输1M以上的文件 (3)能够在多个平台下实现通信 C++平台无关性

2.3 开发工具

(1)开发语言 C++

C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛;C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:封装、继承、多态等特性! (2)开发工具 Qt

Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下

第 2 页

的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。

第 3 页

2.4 TCP/UDP工作协议流程

(1)TCP协议的工作流程

服务器端 客户端 用socket方法建立套接用bind方法把套接字与本地地址绑定 用Listen方法准备好连用accept方法接受连接,并等待client端连接 用socket方法建立套接字 如连接已建立,accept返回新的套接字 进行连接 用connect方法把套接字与server端相连 用Receive和send方法在套接字上做数据交换 数据交换 用Receive和send方法在套接字上做数据交换 Shutdown方法用于释放连接 关闭套接字,服务结束 Shutdown方法用于释放连接 关闭套接字,服务结束

图2-1 TCP协议的工作流程

第 4 页

(2)UDP协议的工作流程

服务器端 客户端 用socket方法建立套接字 用socket方法建立套接字 用bind方法把套接字与本地地址绑定 用bind方法把套接字与本地地址绑定 用Receive和send方法在套接字上做数据交换 数据传送 用Receive和send方法在套接字上做数据交换 Shutdown方法用于释放连接 Shutdown方法用于释放连接 关闭套接字,服务结束 关闭套接字,服务结束

图2-2 UDP协议的工作流程

第 5 页

3 系统总体结构设计

3.1 基本简介

整个应用程序要实现聊天及文件传输的功能,主要由三大块组成:

(1)人机交互界面:用于显示连接状态、消息传送、实现消息输入等功能;? (2)消息传输模块:用于实现消息传输协议的封装与解包工作,实现消息传

输控制;

(3)文件传输模块:用于实现文件传输协议的封装与解包工作,实现文件头

及文件的发送与接收控制。

3.2 系统功能模块设计

交互界面包含3大功能块:

(1)聊天窗口:包括发送和接收到的信息显示框和信息的输入框; (2)文件收发:包括需要填写的建立TCP连接的服务器信息框和文件传输需

要的功能和显示进度框;

(3)附加功能:附加“消息记录”和“使用帮助”的对话框,点击对应按钮接口

打开。

3.3 功能模块介绍

3.3.1 聊天功能模块

聊天也就是信息(字符串)的收发,根据其实时性的要求与短消息传递的特点,采用UDP协议来实现。

在Qt中提供了QUdpSocket 类来进行UDP数据报(datagrams)的发送和接收。UDP的应用是很简单的。我们只需要在发送端执行writeDatagram()函数将信息发送到广播地址的某一个端口,然后接收端绑定到这个端口,只要这个端口有数据,就会发送readyRead()信号,我们接收到该信号后进行数据处理即可。 (1)客户端

/***** 创建Udp套接字和绑定端口与槽函数 *********/ QUdpSocket *UdpSender = new QUdpSocket(this); QUdpSocket *UdpReader = new QUdpSocket(this);

// 将UdpReader绑定到广播地址的5566端口,接收发到这个端口的信息

第 6 页

UdpReader->bind(5566, QUdpSocket::ShareAddress);

// 将有数据的readyRead()信号绑定到读信息的readMessage()槽函数 connect(UdpReader, SIGNAL(readyRead()), this, SLOT(readMessage())); /***** 发送消息 *********/ void sendMessage() {

QByteArray datagram = “hello world!”;

UdpSender ->writeDatagram(datagram.data(),datagram.size(), QHostAddress::Broadcast,5566); }

/***** 接收消息 *********/ void readMessage() {

//拥有等待的数据报

while(UdpReader->hasPendingDatagrams()) {

QByteArray datagram; //拥于存放接收的数据报 //让datagram的大小为等待处理的数据报的大小,这样才能接收到完整的数据

datagram.resize(UdpReader->pendingDatagramSize());

//接收数据报,将其存放到datagram中

UdpReader->readDatagram(datagram.data(), datagram.size()); serverMessage = datagram; } } (2)服务器端

过程与代码和客户端一致,只是因为是双向通信,所以在服务器端需要发送的端口号要不一样。具体见工程代码。 3.3.2 文件传输模块

文件传送具有连续性和可靠性要求的特点,通常采用点对点通信,并应用TCP服务来保证数据传输过程中的准确性和顺序性。

TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,实现与客户端的连接。建立连接后,任何一方都可以进行数据的发送。另一端一旦

第 7 页

有数据到来就会发出readyRead()信号,我们可以关联此信号,进行数据的接收。

由于涉及到文件的拆分和增加文件头信息等,还需要管理发送和接收进度条,代码比较复杂,具体见工程代码,代码都有比较清晰的注释。

第 8 页

4 功能实现

4.1 系统设计流程

4.1.1 聊天功能的流程设计

采用DUP协议设计局域网聊天功能,在局域网聊天功能中,设计了一个客户端和一个服务端, 在通信建立的时候,通信的发起方首先确认通信的IP地址和Port端口,然后发送消息给服务端。服务端需要在同样的端口上等待发起者的信息。 客户端:

开始 从发送窗口中读入数据 Sendmessage调用UDP DatagramSocket DatagramPacket 调用Send方法发送数据 调用close方法关闭客户端 结束 图4-1 发送端工作流程图

第 9 页

服务端:

开始 DatagramSocket DatagramPacket 调用receive方法接收数据,存入datagram中 是否收到 信息 Y 进入文件 接收区 N 显示内容 调用close方法关闭服务端 结束 图4-2 接收端工作流程图

4.1.2 文件传输功能系统实现

使用TCP协议实现文件传输功能,服务端开始监听,客户端选择建立会话。会话建立成功后,开始选择文件进行传输。在文件传输开始时,由客户端给服务端发送文件,内容为待发送文件名和长度。客户端收到后判断是不是传送的文件,如果是则服务端选择接收文件。然后开始传输文件,文件传输完成后,选择关闭服务器端和客户端。

第 10 页

客户端:

开始 选择文件 发送文件名和文件大小 等待对方接收 是否接收 Y N 发送文件 调用ServerSocket创建服务器端 调用getOutputStream()发送文件 将文件的内容读取到buf中 通过write(buf, 0, read)方法发送文件内容 关闭发送端serversocket和server 结束

图4-3 文件传输客户端工作流程

第 11 页

服务端:

开始 接收文件名和文件大小 显示文件名和大小 是否接收 Y N

创建socket 调用getInputStream()方法接收内容 调用getInputStream发送文件 将文件的内容读取到buf中 将文件写入本地磁盘 关闭客服端 结束

图4-4 文件传输服务端工作流程

第 12 页

4.3 实现

4.3.1聊天交互界面 (1)客户端信息显示

(2)服务端信息显示

第 13 页

(3)历史消息显示

4.3.2 文件传输界面

(1)客户端与服务端建立会话成功 左下角显示:Waiting for file transfer…

第 14 页

(2)打开文件,并选择需要传输文件

(3)点击发送按钮,开始文件传输

第 15 页

5 结果与分析

本系统是在Windows下基于Qt软件使用C++语言进行开发的一款点对点聊天和文件传输软件。综合其他聊天软件的优缺点本系统实现了基本的聊天和传送文件的功能。在设计过程中界面设计使用了Qt图形界面生成工具。Socket套接字用来创建连接,实现通信双方正常连接。综合比较TCP和UDP后,选用UDP协议实现聊天功能设计,选用更安全的面向连接的TCP进行文件传输控制协议。在解决I/O阻塞问题时,选择了占用系统资源较少的线程。本系统最终可以实现点对点的字符串发送和接收,能够实现简单的聊天和文件传输功能。

系统能能够完成一定的功能,但还有很多不完善的地方。由于技术的缺乏和时间的限制本系统在实现功能时存在一些问题,例如系统在信息传输过程中,没有对传输的消息和文件进行加密操作,因为这在网络中传输中是很不安全的。

本系统在实现基本功能的基础上还需要完善一些不足的地方。系统需要添加消息加密和解密模块,来保证传输信息的安全性。图形界面是由图形工具Qt生成,虽然使用Qt提供了很强大的能够很容易搭建的图形界面,但是缺点在于生成的界面有点生硬不够美观,需要改进。以上这些问题都要在以后的工作中逐步解决。

本次课程设计让我学到的不止是专业知识,更学到了那种精益求精、严谨的治学精神,这些都使我受益终生的财富。我要在以后的工作生活中保持和发扬这种精神。

第 16 页

参考文献

[1] 甘刚.Linux/NUIX网络编程[M].北京:中国水利水电出版社,2008. [2] 叶树华.网络编程实用教程[M].北京:人民邮电大学出版社,2010. [3] 杜佳荣, 马建红, 滕振宇.C++网络编程技术与实践[M].北京:清华大学出版社,2008.

第 17 页

本文来源:https://www.bwwdw.com/article/nz2o.html

Top