如何将Qt TCP 简单通信为支持的?
摘要:Qt TCP通信 例子 效果 流程 通信分为服务器和客户端 服务器 实例化一个服务器对象 pServer = new QTcpServer; 关联服务器的newConnection信号,当有新的客户端连接时,会发送该信号 connect(p
Qt TCP通信 例子
目录Qt TCP通信 例子效果流程代码源码下载
效果
流程
通信分为服务器和客户端
服务器
实例化一个服务器对象
pServer = new QTcpServer;
关联服务器的newConnection信号,当有新的客户端连接时,会发送该信号
connect(pServer, &QTcpServer::newConnection, this, &TCP::slo_newConnection);
启动监听
pServer->listen(QHostAddress("127.0.0.1"), 8848);
当有客户端建立连接时,在关联newConnection信号,对应的槽函数中获取与对应客户端通信的套接字对象
// 获取与客户端通信的套接字对象
QTcpSocket * tcpSocket = pServer->nextPendingConnection();
关联套接字的readyRead信号,接收客户端信息,关联套接字的disconnected信号,处理客户端断开连接
// 绑定信号 ,接收客户端消息
connect(tcpSocket, &QTcpSocket::readyRead, this, &TCP::slo_readMsg);
// 客户端断开连接
connect(tcpSocket, &QTcpSocket::disconnected,this,&TCP::slo_clientDisConn);
向所有客户端发送消息
// 遍历所有客户端套接字
for (auto socket : mSokets)
{
socket->write(ui->lineEdit_3->text().toUtf8());
}
关闭监听,直接close()
pServer->close();
客户端
实例化与服务器通信的套接字对象
// 通信的套接字对象
pSokcet = new QTcpSocket(this);
关联套接字的readyRead信号,接收服务器信息
// 关联信号 ,接收服务端的消息
connect(pSokcet, &QTcpSocket::readyRead, this, &TCP_Client::slo_readMsg);
连接服务器
pSokcet->connectToHost(QHostAddress("127.0.0.1"), 8848);
向服务器发送消息
pSokcet->write(ui.lineEdit_3->text().toUtf8());
接收服务器消息
QString msg = QString::fromUtf8(pSokcet->readAll());
断开连接
pSokcet->close();
代码
服务器代码
.h
#pragma once
#include <QWidget>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
namespace Ui { class TCP; };
class TCP : public QWidget
{
Q_OBJECT
public:
TCP(QWidget *parent = Q_NULLPTR);
~TCP();
private slots:
void slo_newConnection(); // 新客户端连接
void slo_clientDisConn(); // 客户端断开连接
void slo_listenerStart(); // 开启监听
void slo_listenerStop(); // 关闭监听
void slo_replyAll(); // 回复所有客户端
void slo_readMsg(); // 接收客户端消息
private:
void init(); // 初始化
void updateMsg(const QString & msg); // 更新消息
private:
Ui::TCP *ui;
QTcpServer * pServer; // 服务器对象
QList<QTcpSocket*> mSokets; // 保存和所有客户端通信的套
