QT tcp通信
cpp
QT += core gui network
CONFIG += C++11
main.cpp
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
cpp
#include <QTcpServer> // 监听套接字
#include <QTcpSocket> // 通信套接字
private slots:
void on_pushButtonsend_clicked();
void on_pushButton_2close_clicked();
private:
QTcpServer *tcpServer; // 监听套接字
QTcpSocket *tcpSocket; // 通信套接字
};
serverwidget.cpp
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();
// 给对方发送数据 使用套接字是tcpSocket
tcpSocket->write( str.toUtf8().data() );
}
void ServerWidget::on_pushButton_2close_clicked()
{
if(NULL == tcpSocket){
return;
}
// 主动和客户端断开连接
tcpSocket->disconnectFromHost();
tcpSocket->close();
tcpSocket = NULL;
}
clientwidget.h
cpp
#include <QTcpSocket> // 通信套接字
private slots:
void on_pushButtonconn_clicked();
void on_pushButton_2send_clicked();
void on_pushButton_3close_clicked();
private:
QTcpSocket *tcpsocket; // 通信套接字
clientwidget.cpp
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