QT客户端与Linux服务器端进行tcp通信之客户端

首先我们建立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();函数将其断开连接并关闭我们的套接字

 

代码如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>
#include <QDebug>
#include <QByteArray>
#include <QTcpSocket>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::MainWindow *ui;
    QTcpSocket * tcpSoket;
};

#endif // MAINWINDOW_H

 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTcpSocket>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    tcpSoket = nullptr;
    tcpSoket = new QTcpSocket(this);  //创建通信对象

    setWindowTitle("socket客户端");

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

    });


    connect(tcpSoket,&QTcpSocket::readyRead,[=]{
        QByteArray array = tcpSoket->readAll();

        ui->textEdit->append(array);

    });
}

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

//连接
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);

}

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

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

}

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

    tcpSoket->disconnectFromHost();

    tcpSoket->close();

    tcpSoket = nullptr;

}
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值