• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

QT客户端和Linux服务器端进行tcp通信:客户端

武飞扬头像
一只小菜gdou
帮助1

首先我们建立socket客户端,在创建客户端前,我们需要将.pro文件中链接上network。

如下:

学新通

代码运行如下:

学新通

QT中的TCP

学新通

完成客户端窗口时 ,我们需要先在堆区建立一个通信套接字

tcpSoket = new QTcpSocket(this); //创建通信对象

然后我们可以调用connect函数连接我们的服务器连接信号,用来提醒我们完成服务器的连接

    connect(tcpSoket,&QTcpSocket::connected,[=]{                                     ui->textEdit->setText(QString("已成功连接上服务器"));   
 });

做完这些,我们就要使用我们在qt中设置的按键了

我们首先在connect这个按钮设立槽函数,将我们的端口号与ip地址连接到服务器

//连接
void MainWindow::on_pushButton_clicked()
{
    if(nullptr == ui->lineEdit||
            nullptr == ui->lineEdit_2){
        qDebug() << "错误:端口号或ip地址为空";
        return;
    }

    QString str = ui->lineEdit->text();
    qint16 port = ui->lineEdit_2->text().toInt();

    //通信套接字,通过协议栈触发
    tcpSoket->connectToHost(str,port);}

将我们的端口号将ip地址和端口号发送出去进行连接,直接通过协议栈发送。

连接完成后我们就可以进行信息的发送,设置sendbuf按钮的槽函数

void MainWindow::on_pushButton_2_clicked()
{
    //如果通信套接字为空,不给予通信流程
    if(nullptr == tcpSoket){
        return;
    }
    QString str = ui->textEdit->toPlainText();

    tcpSoket->write(str.toUtf8().data());
    ui->textEdit->clear();

}

我们使用toPlainText()函数将文本内容进行读取,通过write函数将我们的信息发出,注意发出时我们需要将str的类型转换为char类型便于服务器的读取。

还有我们的断开连接功能 设置disconnect按钮的槽函数

void MainWindow::on_pushButton_3_clicked()
{
    if(nullptr == tcpSoket){
        return;
    }

    tcpSoket->disconnectFromHost();

    tcpSoket->close();

    tcpSoket = nullptr;

}

使用disconnectFromHost();函数将其断开连接并关闭我们的套接字

代码如下:

  1.  
    #ifndef MAINWINDOW_H
  2.  
    #define MAINWINDOW_H
  3.  
     
  4.  
    #include <QMainWindow>
  5.  
    #include <QTcpSocket>
  6.  
    #include <QDebug>
  7.  
    #include <QByteArray>
  8.  
    #include <QTcpSocket>
  9.  
     
  10.  
     
  11.  
    namespace Ui {
  12.  
    class MainWindow;
  13.  
    }
  14.  
     
  15.  
    class MainWindow : public QMainWindow
  16.  
    {
  17.  
    Q_OBJECT
  18.  
     
  19.  
    public:
  20.  
    explicit MainWindow(QWidget *parent = 0);
  21.  
    ~MainWindow();
  22.  
     
  23.  
    private slots:
  24.  
    void on_pushButton_clicked();
  25.  
     
  26.  
    void on_pushButton_2_clicked();
  27.  
     
  28.  
    void on_pushButton_3_clicked();
  29.  
     
  30.  
    private:
  31.  
    Ui::MainWindow *ui;
  32.  
    QTcpSocket * tcpSoket;
  33.  
    };
  34.  
     
  35.  
    #endif // MAINWINDOW_H
学新通
  1.  
    #include "mainwindow.h"
  2.  
    #include "ui_mainwindow.h"
  3.  
    #include <QTcpSocket>
  4.  
     
  5.  
     
  6.  
    MainWindow::MainWindow(QWidget *parent) :
  7.  
    QMainWindow(parent),
  8.  
    ui(new Ui::MainWindow)
  9.  
    {
  10.  
    ui->setupUi(this);
  11.  
    tcpSoket = nullptr;
  12.  
    tcpSoket = new QTcpSocket(this); //创建通信对象
  13.  
     
  14.  
    setWindowTitle("socket客户端");
  15.  
     
  16.  
    connect(tcpSoket,&QTcpSocket::connected,[=]{
  17.  
    ui->textEdit->setText(QString("已成功连接上服务器"));
  18.  
     
  19.  
    });
  20.  
     
  21.  
     
  22.  
    connect(tcpSoket,&QTcpSocket::readyRead,[=]{
  23.  
    QByteArray array = tcpSoket->readAll();
  24.  
     
  25.  
    ui->textEdit->append(array);
  26.  
     
  27.  
    });
  28.  
    }
  29.  
     
  30.  
    MainWindow::~MainWindow()
  31.  
    {
  32.  
    delete ui;
  33.  
    }
  34.  
     
  35.  
    //连接
  36.  
    void MainWindow::on_pushButton_clicked()
  37.  
    {
  38.  
    if(nullptr == ui->lineEdit||
  39.  
    nullptr == ui->lineEdit_2){
  40.  
    qDebug() << "错误:端口号或ip地址为空";
  41.  
    return;
  42.  
    }
  43.  
     
  44.  
    QString str = ui->lineEdit->text();
  45.  
    qint16 port = ui->lineEdit_2->text().toInt();
  46.  
     
  47.  
    //通信套接字,通过协议栈触发
  48.  
    tcpSoket->connectToHost(str,port);
  49.  
     
  50.  
    }
  51.  
     
  52.  
    void MainWindow::on_pushButton_2_clicked()
  53.  
    {
  54.  
    //如果通信套接字为空,不给予通信流程
  55.  
    if(nullptr == tcpSoket){
  56.  
    return;
  57.  
    }
  58.  
    QString str = ui->textEdit->toPlainText();
  59.  
     
  60.  
    tcpSoket->write(str.toUtf8().data());
  61.  
    ui->textEdit->clear();
  62.  
     
  63.  
    }
  64.  
     
  65.  
    void MainWindow::on_pushButton_3_clicked()
  66.  
    {
  67.  
    if(nullptr == tcpSoket){
  68.  
    return;
  69.  
    }
  70.  
     
  71.  
    tcpSoket->disconnectFromHost();
  72.  
     
  73.  
    tcpSoket->close();
  74.  
     
  75.  
    tcpSoket = nullptr;
  76.  
     
  77.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiegcfb
系列文章
更多 icon
同类精品
更多 icon
继续加载