Qt中TCP通信
总体流程
文章图片
客户端部分
UI部分
文章图片
TcpClient.h
#pragma once#include
#include "ui_TcpClient.h"
#include
#include class TcpClient : public QWidget
{
Q_OBJECTpublic:
TcpClient(QWidget *parent = Q_NULLPTR);
private:
Ui::TcpClientClass ui;
QTcpSocket* m_pTcpSocket = nullptr;
private slots:
void on_pushButtonLink_clicked();
void on_pushButtonSend_clicked();
void on_pushButtonClose_clicked();
};
TcpClient.cpp
#include "TcpClient.h"#pragma execution_character_set("utf-8")TcpClient::TcpClient(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
m_pTcpSocket = new QTcpSocket(this);
//connect()
ui.lineEditIP->setText("127.0.0.1");
ui.lineEditPort->setText("8000");
connect(m_pTcpSocket, &QTcpSocket::connected,
[=]()
{
ui.textEditRead->setText("成功和服务器建立连接");
});
connect(m_pTcpSocket, &QTcpSocket::readyRead,
[=]()
{
//获取对方发送的内容
QByteArray array = m_pTcpSocket->readAll();
ui.textEditRead->append(array);
});
}void TcpClient::on_pushButtonLink_clicked()
{
QString strIP = ui.lineEditIP->text();
qint16 nPort = ui.lineEditPort->text().toInt();
m_pTcpSocket->connectToHost(QHostAddress(strIP), nPort);
}void TcpClient::on_pushButtonSend_clicked()
{
//获取编辑框内容
QString strContent = ui.textEditWrite->toPlainText();
m_pTcpSocket->write(strContent.toUtf8().data());
}void TcpClient::on_pushButtonClose_clicked()
{
m_pTcpSocket->disconnectFromHost();
m_pTcpSocket->close();
}
服务端部分
UI部分
文章图片
TcpServer.h
#pragma once#include
#include "ui_TcpServer.h"
#include
#include class TcpServer : public QWidget
{
Q_OBJECTpublic:
TcpServer(QWidget *parent = Q_NULLPTR);
private:
Ui::TcpServerClass ui;
//监听套接字
QTcpServer* m_pTcpServer = nullptr;
//通信套接字
QTcpSocket* m_pSocket = nullptr;
private slots:
void on_pushButtonSend_clicked();
void on_pushButtonClose_clicked();
};
TcpServer.cpp
#include "TcpServer.h"#pragma execution_character_set("utf-8")TcpServer::TcpServer(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
//监听套接字,指定父对象,让其自动回收空间
m_pTcpServer = new QTcpServer(this);
m_pTcpServer->listen(QHostAddress::Any, 8000);
connect(m_pTcpServer, &QTcpServer::newConnection,
[=]()
{
//取出建立好链接的套接字
m_pSocket = m_pTcpServer->nextPendingConnection();
//获取对方的IP和端口
QString strIP = m_pSocket->peerAddress().toString();
qint16 nPort = m_pSocket->peerPort();
QString strTemp = QString("[%1:%2]:成功连接").arg(strIP).arg(nPort);
ui.textEditRead->setText(strTemp);
connect(m_pSocket, &QTcpSocket::readyRead,
[=]()
{
//从通信套接字中取出内容
QByteArray array = m_pSocket->readAll();
ui.textEditRead->append(array);
});
});
}void TcpServer::on_pushButtonSend_clicked()
{
if (nullptr == m_pSocket)
{
return;
} //获取编辑区的内容
QString strContent = ui.textEditWrite->toPlainText();
if (strContent.isEmpty())
{
return;
}
//给对方发送数据,使用的是套接字是m_pSocket
m_pSocket->write(strContent.toUtf8().data());
}void TcpServer::on_pushButtonClose_clicked()
{
if (nullptr == m_pSocket)
{
return;
} //主动和客户端断开连接
m_pSocket->disconnectFromHost();
m_pSocket->close();
m_pSocket = nullptr;
}
【Qt中TCP通信】
推荐阅读
- 热闹中的孤独
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- Docker应用:容器间通信与Mariadb数据库主从复制
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售