Qt中TCP通信

总体流程
Qt中TCP通信
文章图片

客户端部分
UI部分
Qt中TCP通信
文章图片

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部分
Qt中TCP通信
文章图片

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通信】

    推荐阅读