Qt的Tcp通信
Tcp通信
- 1、前言
- 2 、客户端
- 2.1创建客户端ui界面
- 2.2在.pro文件中添加
network
- 2.3定义一个通信对象并创建
socket
对象 - 2.4socket连接成功,会发出信号
- 2.5socket连接失败,发出信号
- 2.6创建取消按钮的信号与槽
- 2.7创建连接按钮的信号与槽
- 2.8 .h文件和.cpp文件
- 2.8.1 .h文件
- 2.8.2 .cpp文件
- 3、服务器
- 3.1创建服务器ui界面
- 3.2在.pro文件中添加
network
- 3.3定义一个服务器对象并创建
server
对象 - 3.4监听连接对象
- 3.5客户端发起连接时,server会发出信号
- 3.6创建处理有新客户端连接时的槽函数
- 3.7 .h文件和.cpp文件
- 3.7.1 .h文件
- 3.7.2 .cpp文件
- 4、总结
1、前言
前言:记录一下自己对于Qt中Tcp的学习,方便别人参考,也可以巩固自己的学习或者让 自己日后回顾。 |
2 、客户端
2.1创建客户端ui界面
2.2在.pro文件中添加network
先在.pro 文件中添加network |
2.3定义一个通信对象并创建socket
对象
private:
Ui::Widget *ui;
QTcpSocket *socket; //定义一个网络通信对象
socket = new QTcpSocket(this); //创建socket对象
2.4socket连接成功,会发出信号
//连接服务器成功,socket会发出一个信号
connect(socket, &QTcpSocket::connected,this,[=](){
QMessageBox::information(this,"连接提示","连接服务器成功");
});
2.5socket连接失败,发出信号
//连接断开
connect(socket, &QTcpSocket::disconnected,this,[=](){
QMessageBox::warning(this,"连接提示","连接异常");
});
2.6创建取消按钮的信号与槽
//取消按钮
void Widget::on_canclePushButton_clicked()
{
this->close(); //关闭窗口
}
2.7创建连接按钮的信号与槽
与上面类似 |
//连接按钮
void Widget::on_connectPushButton_clicked()
{
//1.获取ip地址和端口号
QString ip = ui->ipLineEdit->text();
QString port = ui->potrLineEdit->text();
qDebug() << ip;
qDebug() << port;
//连接服务器
socket->connectToHost(QHostAddress(ip),port.toShort());
}
2.8 .h文件和.cpp文件
2.8.1 .h文件
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpSocket>
#include <QHostAddress>
#include <QMessageBox>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_canclePushButton_clicked(); //取消按钮
void on_connectPushButton_clicked(); //连接按钮
private:
Ui::Widget *ui;
QTcpSocket *socket; //定义一个网络通信对象
};
#endif // WIDGET_H
2.8.2 .cpp文件
.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
socket = new QTcpSocket(this); //创建socket对象
//连接服务器成功,socket会发出一个信号
connect(socket, &QTcpSocket::connected,this,[=](){
QMessageBox::information(this,"连接提示","连接服务器成功");
});
//连接断开
connect(socket, &QTcpSocket::disconnected,this,[=](){
QMessageBox::warning(this,"连接提示","连接异常");
});
}
Widget::~Widget()
{
delete ui;
}
//取消按钮
void Widget::on_canclePushButton_clicked()
{
this->close(); //关闭窗口
}
//连接按钮
void Widget::on_connectPushButton_clicked()
{
//1.获取ip地址和端口号
QString ip = ui->ipLineEdit->text();
QString port = ui->potrLineEdit->text();
qDebug() << ip;
qDebug() << port;
//连接服务器
socket->connectToHost(QHostAddress(ip),port.toShort());
}
3、服务器
3.1创建服务器ui界面
3.2在.pro文件中添加network
3.3定义一个服务器对象并创建server
对象
private:
Ui::Widget *ui;
QTcpServer *server; //定义服务器
server = new QTcpServer(this); //创建服务器对象
3.4监听连接对象
server->listen(QHostAddress::AnyIPv4,port); //监听来自任何IPv4地址的连接请求
3.5客户端发起连接时,server会发出信号
//客户端发起连接,server发出信号
connect(server,&QTcpServer::newConnection,this, &Widget::newClientHandler);
3.6创建处理有新客户端连接时的槽函数
private slots:
void newClientHandler(); //处理新客户端连接
//处理新客户端连接
void Widget::newClientHandler()
{
//建立Tcp连接
QTcpSocket *socket = server->nextPendingConnection();
// socket->peerAddress(); //获取客户端地址
// socket->peerPort(); //获取客户端端口号
ui->ipLineEdit->setText(socket->peerAddress().toString()); //显示地址
ui->portLineEdit->setText(QString::number(socket->peerPort())); //显示端口号
}
3.7 .h文件和.cpp文件
3.7.1 .h文件
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#define port 8000
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void newClientHandler(); //处理新客户端连接
private:
Ui::Widget *ui;
QTcpServer *server; //定义服务器
};
#endif // WIDGET_H
3.7.2 .cpp文件
.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
server = new QTcpServer(this); //创建服务器对象
server->listen(QHostAddress::AnyIPv4,port); //监听来自任何IPv4地址的连接请求
//客户端发起连接,server发出信号
connect(server,&QTcpServer::newConnection,this, &Widget::newClientHandler);
}
Widget::~Widget()
{
delete ui;
}
//处理新客户端连接
void Widget::newClientHandler()
{
//建立Tcp连接
QTcpSocket *socket = server->nextPendingConnection();
// socket->peerAddress(); //获取客户端地址
// socket->peerPort(); //获取客户端端口号
ui->ipLineEdit->setText(socket->peerAddress().toString()); //显示地址
ui->portLineEdit->setText(QString::number(socket->peerPort())); //显示端口号
}
4、总结
总结:以上就是Qt的Tcp通信的整个过程了,浏览过程中,如若发现错误,欢迎大家指正, 有问题的可以评论区留言或者私信。 最后,如果大家觉得有所帮助的话,可以点个赞, 谢谢大家!永远相信美好的事情即将发生! |