基于Qt的P2P局域网聊天及文件传送软件设计

基于Qt的P2P局域网聊天及文件传送软件设计

zouxy09@qq.com

这是我的《通信网络》的课程设计作业,之前没怎么学过Qt,但Qt实在太好用了,它提供的网络通信的接口使用起来很方便,所以搞这东西才花了几天时间,现在摆上来和大家分享下。呵呵。另外,下面不会解释具体的代码实现过程(需要有一点点的Qt基础和Qt网络编程基础),在工程的代码文件中会有清晰的注释。

工程代码下载地址:(在CSDN中,我的下载积分是0,穷苦很久了,所以下载积分设地比较高,看懂出对积分的渴望。所以有分的就给点分,没分的就发邮件给我,我再把工程回复给您就好了。原谅我的庸俗。呵呵)

一、设计目标

通过利用Qt应用程序框架提供的QTcpSocket和QUdpSocket类进行网络通信,在windows平台(支持跨平台,将源码在目标平台重编译即可)上实现了两大功能:

1)实现客户端与服务器端之间文件传输功能;

2)实现客户端与服务器端之间的聊天功能;

二、系统设计框架

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

1)人机交互界面:用于显示连接状态、消息传送、实现消息输入等功能;

2)消息传输模块:用于实现消息传输协议的封装与解包工作,实现消息传输控制;

3)文件传输模块:用于实现文件传输协议的封装与解包工作,实现文件头及文件的发送与接收控制。

三、设计细节

3.1、TCP/IP与UDP通信原理

计算机网络通信主要是通过Socket(套接字)进行的。它提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。在应用开发中就像使用文件句柄一样,可以对Socket句柄进行读,写操作。

Qt提供了较为完整的网络应用服务,可以实现大部分网络应用程序的开发,提供了QTcpSocket和QUdpSocket类,用于实现TCP和UDP传输协议。提供了QTcpServer类创建服务器应用程序来处理引入的TCP连接。

3.2、聊天系统设计

聊天也就是信息(字符串)的收发,根据其实时性的要求与短消息传递的特点,采用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)服务器端

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

3.3、文件传输设计

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

可以提高你的水平。(戏从对手来。

基于Qt的P2P局域网聊天及文件传送软件设计

相关文章:

你感兴趣的文章:

标签云: