QT tcp通信
QT tcp通信
TcpTest.pro
QT += core gui networkCONFIG += C++11
main.cpp
#include "serverwidget.h"
#include <QApplication>#include "clientwidget.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);ServerWidget w;w.show();ClientWidget w2;w2.show();return a.exec();
}
serverwidget.h
#include <QTcpServer> // 监听套接字
#include <QTcpSocket> // 通信套接字private slots:void on_pushButtonsend_clicked();void on_pushButton_2close_clicked();private:QTcpServer *tcpServer; // 监听套接字QTcpSocket *tcpSocket; // 通信套接字};
serverwidget.cpp
#include "serverwidget.h"
#include "ui_serverwidget.h"
#include <QDebug>ServerWidget::ServerWidget(QWidget *parent) :QWidget(parent),ui(new Ui::ServerWidget)
{ui->setupUi(this);tcpServer = NULL;tcpSocket = NULL;// 监听套接字,指定父对象让其自动回收空间tcpServer = new QTcpServer(this);tcpServer->listen(QHostAddress::Any, 8888);setWindowTitle("服务器: 8888");connect(tcpServer, &QTcpServer::newConnection, [=](){// 取出建立好连接的套接字tcpSocket = tcpServer->nextPendingConnection();// 获取对方的ip和端口QString ip = tcpSocket->peerAddress().toString();// qint16 port = tcpSocket->peerPort();quint16 port = tcpSocket->peerPort();// qDebug() << port;QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port);ui->textEdit->setText(temp);connect(tcpSocket, &QTcpSocket::readyRead, [=](){// 从通信套接字中取出内容QByteArray array = tcpSocket->readAll();ui->textEdit->append(array);});});}ServerWidget::~ServerWidget()
{delete ui;
}void ServerWidget::on_pushButtonsend_clicked()
{if(NULL == tcpSocket){return;}// 获取编辑区内容QString str = ui->textEdit_2->toPlainText();// 给对方发送数据 使用套接字是tcpSockettcpSocket->write( str.toUtf8().data() );}void ServerWidget::on_pushButton_2close_clicked()
{if(NULL == tcpSocket){return;}// 主动和客户端断开连接tcpSocket->disconnectFromHost();tcpSocket->close();tcpSocket = NULL;
}
clientwidget.h
#include <QTcpSocket> // 通信套接字private slots:void on_pushButtonconn_clicked();void on_pushButton_2send_clicked();void on_pushButton_3close_clicked();private:QTcpSocket *tcpsocket; // 通信套接字
clientwidget.cpp
#include "clientwidget.h"
#include "ui_clientwidget.h"#include <QHostAddress>ClientWidget::ClientWidget(QWidget *parent) :QWidget(parent),ui(new Ui::ClientWidget)
{ui->setupUi(this);tcpsocket = NULL;// 分配空间,指定父对象tcpsocket = new QTcpSocket(this);setWindowTitle("客户端");connect(tcpsocket, &QTcpSocket::connected, [=](){ui->textEdit->setText("成功和服务器建立好连接");});connect(tcpsocket, &QTcpSocket::readyRead, [=](){// 获取对方发送的内容 从通信套接字中取出内容QByteArray array = tcpsocket->readAll();// 追加到编辑区中ui->textEdit->append(array);});}ClientWidget::~ClientWidget()
{delete ui;
}void ClientWidget::on_pushButtonconn_clicked()
{// 获取服务器ip和端口QString ip = ui->lineEdit_2IP->text();quint16 port = ui->lineEditport->text().toInt();// 主动和服务器建立连接tcpsocket->connectToHost(QHostAddress(ip), port);}void ClientWidget::on_pushButton_2send_clicked()
{// 获取编辑框内容QString str = ui->textEdit_2->toPlainText();// 发送数据tcpsocket->write( str.toUtf8().data() );
}void ClientWidget::on_pushButton_3close_clicked()
{// 主动和对方断开连接tcpsocket->disconnectFromHost();tcpsocket->close();}
serverwidget.ui
clientwidget.ui