QT 簡單TCP客戶端

Demo下載:http://www.demodashi.com/demo/16932.html

最近要搞一個三端互聯數據收發器,一個設備客戶端,一個服務器,一個PC客戶端。服務器採用JAVA語言寫的,而PC端我打算用QT來寫。QT,一種非常好用的工具(個人感覺)。學習JAVA的,也可以去試試,不過C++基礎還是要有的。話不多說,直接上代碼。

首先項目**.pro 文件中添加

QT += network

mainwindow.h 代碼

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QTcpSocket>
#include <QHostAddress>
#include <QMessageBox>

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 ReadData();
    void ReadError(QAbstractSocket::SocketError);
    void SendTcpData(QString msg);


private:
    Ui::MainWindow *ui;
    QTcpSocket *tcpClient; //定義

};
#endif // MAINWINDOW_H

mainwindow.cpp 

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //初始化TCP
    tcpClient = new QTcpSocket(this);   //實例化
    tcpClient->abort();                 //取消原有連接
    tcpClient->connectToHost("xxxxxIP地址",xxxx端口號); //IP以及端口號

    connect(tcpClient, SIGNAL(readyRead()), this, SLOT(ReadData()));
    connect(tcpClient, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(ReadError(QAbstractSocket::SocketError)));

    if (tcpClient->waitForConnected(30000))  // 連接成功
    {
        qDebug() << "已連接到服務器!" ;
    }else{
        qDebug() << "未連接服務器!" ;
    }

}

MainWindow::~MainWindow()
{
    delete this->tcpClient;
    delete ui;
}

/**
*   接收數據
*/
void MainWindow::ReadData()
{
    QByteArray buffer = tcpClient->readAll();
    if(!buffer.isEmpty())
    {
         qDebug() << "接收數據->"+buffer ;
    }
}

/**
*斷開連接
*/
void MainWindow::ReadError(QAbstractSocket::SocketError)
{
    qDebug() << "與服務器連接已斷開!" ;
    tcpClient->disconnectFromHost();
}


/**
 * @brief MainWindow::SendTcpData
 * @param msg
 * 發送數據
 */
void MainWindow::SendTcpData(QString msg){
    if(tcpClient->isOpen()){
        QByteArray sendMessage = msg.toUtf8();
        tcpClient->write(sendMessage);
        tcpClient->flush();
    }
}

 

PS :  本案例僅僅介紹如何用QT 建立一個TCP客戶端!  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章