当前位置:文档之家› 基于Qt的p2p局域网聊天和文件传输软件要点

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

基于Qt的局域网聊天和文件传输软件设计摘要随着计算机网络技术的飞速发展,人们对于网络的依赖性也越来越大。

通过网络的局域网通信也越来越受到人们的喜爱,比如说现在非常流行的QQ局域网通信软件就解决了人们在网络中交流的需求。

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

关键词:计算机网络, TCP, UDP , 文件传输;AbstractWith 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.2P2P的局域网聊天和文件传输软件的功能 (2)2.3开发工具 (2)2.4TCP/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的局域网聊天和文件传输的软件的实现原理和实现的过程。

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)开发工具QtQt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。

它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。

Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。

2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。

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 是同类型的东西。

2.4 TCP/UDP 工作协议流程(1)TCP 协议的工作流程图2-1 TCP 协议的工作流程服务器端 用socket 方法建立套接用bind 方法把套接字与本地地址绑定用Listen 方法准备好连用accept 方法接受连接,并等待client 端连接 如连接已建立,accept 返回新的套接字 用Receive 和send 方法在套接字上做数据交换 进行连接 数据交换 Shutdown 方法用于释放连接 关闭套接字,服务结束用socket 方法建立套接字用connect 方法把套接字与server 端相连用Receive 和send 方法在套接字上做数据交换Shutdown 方法用于释放连接关闭套接字,服务结束 客户端(2)UDP 协议的工作流程图2-2 UDP 协议的工作流程 数据传送 用Receive 和send 方法在套接字上做数据交换 关闭套接字,服务结束 Shutdown 方法用于释放连接 服务器端 用socket 方法建立套接字 用bind 方法把套接字与本地地址绑定 用Receive 和send 方法在套接字上做数据交换关闭套接字,服务结束Shutdown 方法用于释放连接客户端用socket 方法建立套接字 用bind 方法把套接字与本地地址绑定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端口,接收发到这个端口的信息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)服务器端过程与代码和客户端一致,只是因为是双向通信,所以在服务器端需要发送的端口号要不一样。

相关主题