Day27Qt实现QTcpClient-2022-01-06

Qt Network(二)Tcp客户端

使用Qt开发Tcp客户端与服务器之间的差异很小,主要是服务器使用的类对象是由QTcpServer实例化的,而客户端的类对象是由QTcpSocket实例化的。另外一点就是客户端,连接服务器时要用到,connectToHost()方法,服务器则是要用listen监听某个端口。当连接建立之后,对于连接的管理,数据的处理几乎连信号都是一样的。因此有关Tcp的简介,开发过程注意事项,步骤等内容,请参见QTcpServer

效果

与网口调试助手测试收发数据正常,网口调试助手链接
Day27Qt实现QTcpClient-2022-01-06_第1张图片
与Qt开发服务器测试收发数据正常
Day27Qt实现QTcpClient-2022-01-06_第2张图片

代码

ui文件

Day27Qt实现QTcpClient-2022-01-06_第3张图片

main文件

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

.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include 
#include 
#include 
#include 
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_btn_Connect_clicked();
    void doProcessConnected();
    void doProcessReadyRead();
    void doProcessDisconnected();
    void doProcessError(QAbstractSocket::SocketError);
    void on_btn_Send_clicked();
private:
    Ui::MainWindow *ui;
    QTcpSocket *myClient;
    void Init();
};
#endif // MAINWINDOW_H

.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Init();
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::Init(){
    this->setWindowTitle("客户端");
    myClient = new QTcpSocket(this);
}
void MainWindow::on_btn_Connect_clicked()
{
    QString servIP = ui->serverIP->text();//获取用户的ip
    QString servPort = ui->serverPort->text();//获取用户的端口
    myClient->connectToHost(QHostAddress(servIP),servPort.toUInt());//连接服务器
    connect(myClient,SIGNAL(connected()),this,SLOT(doProcessConnected()));//连接成功
    connect(myClient,SIGNAL(readyRead()),this,SLOT(doProcessReadyRead()));//获取数据
    connect(myClient,SIGNAL(disconnected()),this,SLOT(doProcessDisconnected()));//连接断开
    connect(myClient,SIGNAL(error(QAbstractSocket::SocketError))
           ,this,SLOT(doProcessError(QAbstractSocket::SocketError)));//连接出错
}
//连接建立信号
void MainWindow::doProcessConnected()
{
    QString msg = "服务器连接成功!";
    ui->textEdit->append(msg);
    ui->btn_Connect->setEnabled(false);
}
void MainWindow::doProcessReadyRead()
{
    QString msg,str1,str2;
    str1 = QString("服务器[%1 %2]说:").arg(myClient->peerAddress().toString()).arg(myClient->peerPort());
    while (!myClient->atEnd()) {
        str2.append(QString(myClient->readAll()));//接收数据
    }
    msg = QString("%1%2").arg(str1).arg(str2);
    ui->textEdit->append(msg);
}
void MainWindow::doProcessDisconnected()
{
    QString msg = "服务器退出!";
    ui->textEdit->append(msg);
    ui->btn_Connect->setEnabled(true);
}
void MainWindow::doProcessError(QAbstractSocket::SocketError err)
{
    qDebug()<<err;
    qDebug()<<myClient->errorString();
}
//发送数据
void MainWindow::on_btn_Send_clicked()
{
    QString msg = ui->textEdit_2->toPlainText();
    int ret = myClient->write(msg.toUtf8());
    qDebug()<<ret;
    if(ret <=0){
        return;
    }
    ui->textEdit_2->clear();
}

你可能感兴趣的:(Qt积累——基础篇,qt,服务器,tcp/ip,网络)