admin管理员组文章数量:1640574
题目要求:
在基于QT的界面基础上,两个窗口通过套接字实现网络通信,所用协议包括TCP和UDP协议,为了模拟不同的计算机,请大家建立两个虚拟机,一个虚拟机运行一个类似QQ的界面,两个界面实现类似QQ聊天。
1.什么是TCP和UDP协议,他么各有什么特点和优缺点?
- TCP(传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
- UDP(用户数据报协议)是一个简单的面向数据报的运输层协议。它不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输很快。
- (1)TCP是面向连接的,UDP是无连接的即发送数据前不需要先建立链接。
- (2)TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
并且因为TCP可靠,面向连接,不会丢失数据因此适合大数据量的交换。 - (3)TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如IP电话和视频会议等)。
- (4)TCP只能是1对1的,UDP支持1对1,1对多。
- (5)TCP的首部较大为20字节,而UDP只有8字节。
- (6)TCP是面向连接的可靠性传输,而UDP是不可靠的。
2.什么又是套接字?
- 所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。
一、新建工程
1.先建立一个新的空文件夹取名为TcpServer,可以随便取名的哈。
2.建立一个QT Application工程
3.name可以取成刚才那个文件夹的名字,然后保存到刚新建那个文件夹里边。
4.默认下一步
5.这里要用QWidget
6.finish
后界面变成下面这个样子,工程创建成功(傻瓜教程)
二、添加必要信息
1.添加需要的头文件
#include <QTcpServer>
#include <QTcpSocket>
#include <QString>
2.添加一个网络模块
network
3.声明两个对象
QTcpServer *tcpServer;
QTcpSocket *tcpSocket;
三、UI界面的设置
1.双击我们的ui
然后界面这样,中间就是我们设计的地方,可以自己设定界面的大小。
2.按住左边箭头尾部的功能模块儿拖拽到编辑区改大小或者调整位置(各模块不要拖拽错了哟)
3.还是一样的拖拽3个按钮到编辑区并改名(如果没有中文输入法的话在Windows下面输入中文然后复制到虚拟机里面)
4.我们在窗口添加两个框,让其更加美观
我们把输入框添加了外框之后外框会置于输入框的上面,会导致我们使用的时候鼠标无法点击到输入框,我们找到输入框这个对象后右键,然后置顶。
5.界面就差不多了,我们开始运行一下,点击然后选择保存所有(Save All)
6.改变量名,这个变量名后面代码中会用到(如果要用后面的代码的话就改成我这样吧,也可以自己更改然后在代码里面更改槽函数的名字既可以哦)。(双击就可以更改啦)
四、服务器代码
main.cpp
里面的代码不用改变,如果想修改窗口标题,可以添加一行代码,下面客户端的时候会提到的。
widget.cpp
#include "widget.h"
#include "ui_widget.h"
/*构造函数*/
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
tcpServer = new QTcpServer(this)</
版权声明:本文标题:QT实现两界面类似QQ聊天 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729306542a1195077.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论