QT TCP服务器

Posted 缘随风烬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT TCP服务器相关的知识,希望对你有一定的参考价值。

注意在.pro文件里加入一行

QT += network


.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void newconnected();
    void sendData();
    void recvData();
    void disconnected();

private:
    Ui::MainWindow *ui;
    QTcpServer *server;
    QTcpSocket *socket;
};

#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->pushButton->setEnabled(false);
    server = new QTcpServer;
    socket = new QTcpSocket;
    if(!server->listen(QHostAddress::AnyIPv4,quint16(8888))){
        return;
    }
    connect(server,SIGNAL(newConnection()),this,SLOT(newconnected()));
    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(sendData()));
}

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

void MainWindow::newconnected()
{
    if(server->hasPendingConnections()){  //如果服务端有一个待处理的连接,就返回真,否则返回假
        socket = server->nextPendingConnection();  //将下一个挂起的连接作为已连接的qtcsocket对象返回。
        if(!socket->isValid()){  //套接字是否有效
            return;
        }
        ui->label->setText("connect");
        ui->pushButton->setEnabled(true);
        connect(socket,SIGNAL(readyRead()),this,SLOT(recvData()));
        connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()));
    }
}

void MainWindow::sendData()
{
    QString str = ui->textEdit_2->toPlainText();
    socket->write(str.toStdString().c_str(),str.length());
}

void MainWindow::recvData()
{
    QByteArray str = socket->readAll();
    ui->textEdit->setText(str);
}

void MainWindow::disconnected()
{
    ui->label->setText("disconnect");
    ui->pushButton->setEnabled(false);
}

 

 

结果:

以上是关于QT TCP服务器的主要内容,如果未能解决你的问题,请参考以下文章

通过 Qt tcp 套接字更改 Qt GUI?

在 Qt 中通过 TCP 传输大文件

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

qt的tcp通信 服务器和客户端读写数据的问题

异常和TCP通讯

qt中用tcp发送Qtablewidget中的数据