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客戶端!