Qt 简易 TCP 服务器

界面:

代码:

.pro

QT       += core gui network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp \
    myserver.cpp

HEADERS += \
    mainwindow.h \
    myserver.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    Images.qrc

 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QList>
#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include "myserver.h"
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_pushButton_clicked();

    void on_pushButton_2_clicked();

private:
    Ui::MainWindow *ui;
    bool enable;
    MyServer *p;
};
#endif // MAINWINDOW_H

  myserver.h

#ifndef MYSERVER_H
#define MYSERVER_H

#include <QDebug>
#include <QHostAddress>
#include <QList>
#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>

class MyServer : public QTcpServer
{
    Q_OBJECT
public:
    const QList<QString> &getRecvList();
    explicit MyServer(QObject *parent = nullptr);
    void startServer(QHostAddress ipv4, quint16 port);
    void sendMessage();
    void settext(QString);
private slots:
    void onNewConnection();
    void onReadyRead();
    void onDisconnected();

private:
    QList<QTcpSocket *> clients;
    QList<QString> recvList;
    QString sendContext;
};

#endif // MYSERVER_H

 main.cpp

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

 mainwindow.cpp

#include "mainwindow.h"

#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , enable(false)
    , p(new MyServer)
{
    ui->setupUi(this);
    this->setWindowTitle("TCP Server");
    this->setWindowIcon(QIcon(":/heads/12.jpg"));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    if (enable == true) {
        ui->pushButton->setText("启动");
    } else {
        ui->pushButton->setText("修改");
    }
    ui->lineEdit_ip->setEnabled(enable);
    ui->lineEdit_port->setEnabled(enable);
    enable = !enable;
    p->startServer(QHostAddress(ui->lineEdit_ip->text()), ui->lineEdit_port->text().toUShort());
}

void MainWindow::on_pushButton_2_clicked()
{
    p->settext(ui->textEdit_send->toPlainText());
    p->sendMessage();
    QList<QString> buf = p->getRecvList();
    for (const QString &item : buf) {
        ui->textEdit_recv->append(item);
    }
}

 myserver.cpp

#include "myserver.h"

const QList<QString> &MyServer::getRecvList()
{
    return recvList;
}

MyServer::MyServer(QObject *parent)
    : QTcpServer{parent}
{
    connect(this, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
}

void MyServer::startServer(QHostAddress ipv4, quint16 port)
{
    if (listen(ipv4, port)) {
        qDebug() << "Server start on " << ipv4.toString() << port;
    } else {
        qDebug() << errorString();
    }
}

void MyServer::sendMessage()
{
    if (clients.last()) {
        clients.last()->write(sendContext.toUtf8());
    }
}

void MyServer::settext(QString s1)
{
    sendContext = s1;
}

void MyServer::onNewConnection()
{
    QTcpSocket *clientSocket = nextPendingConnection();
    if (clientSocket) {
        qDebug() << "New incoming connection from" << clientSocket->peerAddress().toString();
        clients.append(clientSocket);
        connect(clientSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
        connect(clientSocket, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
    }
}

void MyServer::onReadyRead()
{
    QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());
    if (clientSocket) {
        QByteArray data = clientSocket->readAll();
        recvList.append(QString::fromUtf8(data));
    }
}

void MyServer::onDisconnected()
{
    QTcpSocket *clientSocket = qobject_cast<QTcpSocket *>(sender());
    if (clientSocket) {
        clients.removeOne(clientSocket);
        clientSocket->deleteLater();
    }
}

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个开源的容器化平台,用于轻松地打包、部署和运行应用程序。而Nginx是一个高性能的开源反向代理服务器,也是一个流行的Web服务器。 在使用Docker部署Nginx时,你需要以下几个步骤: 1. 首先,你需要安装Docker。你可以根据你的操作系统去官方网站下载并安装Docker。 2. 在安装完成后,你需要编写一个Dockerfile文件来定义Nginx容器的构建过程。一个简单的例子如下: ```dockerfile FROM nginx:latest COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` 这个Dockerfile使用最新版本的Nginx作为基础镜像,然后将自定义的`nginx.conf`文件复制到容器中的`/etc/nginx/nginx.conf`路径下。接着,将容器的80端口暴露出来,并设置Nginx以非守护进程的方式运行。 3. 在同一目录下创建`nginx.conf`文件,并在其中进行Nginx的相关配置。例如,可以指定Nginx监听的端口、代理规则等。 4. 接下来,使用Docker命令来构建镜像。在终端中切换到Dockerfile所在的目录,并执行以下命令: ``` docker build -t my-nginx . ``` 这个命令会根据Dockerfile构建一个名为`my-nginx`的镜像。注意最后的`.`表示Dockerfile所在的路径。 5. 构建完成后,你可以使用以下命令来运行Nginx容器: ``` docker run -d -p 80:80 my-nginx ``` 这个命令会在后台运行一个名为`my-nginx`的容器,并将主机的80端口映射到容器的80端口。 现在,你已经成功地使用Docker部署了Nginx。你可以通过在浏览器中访问`http://localhost`来验证Nginx是否正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值