1.pro文件
QT += network
2.服务器
h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_setListenButton_clicked();
void on_sendMsgButton_clicked();
private:
Ui::MainWindow *ui;
QTcpServer *tcpServer;
QTcpSocket *tcpSocket;
};
#endif // MAINWINDOW_H
cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->portEdit->setText("8899");
setWindowTitle("服务器");
// 创建监听服务器的对象
tcpServer = new QTcpServer(this);
connect(tcpServer,&QTcpServer::newConnection,this, [=](){
tcpSocket = tcpServer->nextPendingConnection(); // 有新的客户端连接,得到一个用于通信的服务器对象
ui->statusLabel->setText("已连接");
// 检测是否可以接收数据
connect(tcpSocket,&QTcpSocket::readyRead,this,[=](){
QByteArray data = tcpSocket->readAll(); // data为client发来的数据
ui->recordEdit->append("客户端:" + data);
});
connect(tcpSocket,&QTcpSocket::disconnected,this,[=](){
tcpSocket->close();
tcpSocket->deleteLater();
ui->statusLabel->setText("未连接");
ui->setListenButton->setDisabled(false);
});
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_setListenButton_clicked()
{
unsigned short port = ui->portEdit->text().toUShort();
tcpServer->listen(QHostAddress::Any, port); // 监听port
ui->setListenButton->setDisabled(true);
}
void MainWindow::on_sendMsgButton_clicked()
{
QString msg = ui->messageEdit->toPlainText();
tcpSocket->write(msg.toUtf8());
ui->recordEdit->append("服务器:" + msg);
}
3.客户端
h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTcpSocket>
#include <QHostAddress>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_sendMsgButton_clicked();
void on_connectButton_clicked();
void on_disconnectButton_clicked();
private:
Ui::MainWindow *ui;
QTcpSocket *tcpSocket;
};
#endif // MAINWINDOW_H
cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->portEdit->setText("8899");
ui->ipEdit->setText("127.0.0.1");
setWindowTitle("客户端");
ui->disconnectButton->setDisabled(true);
// 创建监听服务器的对象
tcpSocket = new QTcpSocket();
connect(tcpSocket,&QTcpSocket::readyRead,this,[=](){
QByteArray data = tcpSocket->readAll(); // data为client发来的数据
ui->recordEdit->append("服务器:" + data);
});
connect(tcpSocket,&QTcpSocket::disconnected, this, [=](){
tcpSocket->close();
tcpSocket->deleteLater();
ui->statusLabel->setText("未连接");
ui->recordEdit->append("断开连接");
ui->connectButton->setDisabled(false);
ui->disconnectButton->setEnabled(false);
});
connect(tcpSocket,&QTcpSocket::connected, this, [=](){
ui->statusLabel->setText("已连接");
ui->recordEdit->append("连接成功");
ui->connectButton->setDisabled(true);
ui->disconnectButton->setEnabled(true);
});
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_sendMsgButton_clicked()
{
QString msg = ui->messageEdit->toPlainText();
tcpSocket->write(msg.toUtf8());
ui->recordEdit->append("客户端:" + msg);
}
void MainWindow::on_connectButton_clicked()
{
QString ip = ui->ipEdit->text();
unsigned short port = ui->portEdit->text().toUShort();
tcpSocket->connectToHost(QHostAddress(ip), port);
}
void MainWindow::on_disconnectButton_clicked()
{
tcpSocket->close();
ui->connectButton->setDisabled(false);
ui->disconnectButton->setEnabled(false);
}