Qt使用QSocket做tcp简单客户端

首先要在工程文件.por中添加network

image

添加新文件

在头文件中导入qtcpsocket

image

之后定义成员函数用于发送和接收数据

Qt封装的socket使用的是信号槽监听接收到的数据

所以需要添加监听

image

使用的传输格式

报文长度8字节字符串 + base64转码的json报文

image

头文件

#ifndef TCPSOCKET_H
#define TCPSOCKET_H
#include<QTcpSocket>

class TcpSocket
{
//    Q_OBJECT
public:
    TcpSocket(QString &ip, quint16 port);
    // 原始数据做base64转码发送
    void sendData(QString data);
    // 读取数据需要做同样操作
    QByteArray readData();
    ~TcpSocket();
    QTcpSocket* m_tcp;
private:

};

#endif // TCPSOCKET_H

源文件

#include "tcpsocket.h"


TcpSocket::TcpSocket(QString &ip, quint16 port)
{
    m_tcp = new QTcpSocket();
    m_tcp->connectToHost(ip, port, QTcpSocket::ReadWrite);
}

void TcpSocket::sendData(QString data)
{
    // 数据做base64转码
    QByteArray base64 = data.toUtf8().toBase64();
    QString le;
    // 预留8字节保存长度
    le.sprintf("%08d", base64.size());
    // 拼接数据 报文长度+报文
    base64 = le.toUtf8() + base64;
    // 发送数据
    m_tcp->write(base64.data(), base64.size());

}

QByteArray TcpSocket::readData()
{
    char buf[9]={0};
    // 每次取8个字节长度
    m_tcp->read(buf, 8);
    int len = atoi(buf);
    // 保存数据缓冲区
    char data[len+1] = {0};
    // 读取指定长度
    m_tcp->read(data, len);
    // base64转码
    QByteArray row = QByteArray::fromBase64(data);
    return row;
}


TcpSocket::~TcpSocket()
{
    delete m_tcp;
}

码云代码位置
https://gitee.com/YiZhiLuGuoDeXiaoMaNong/personnel-management

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

一介野生码农

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值