人员管理客户端练习(五)Qt使用QSocket做tcp简单客户端

目录

(一)Qt制作简单的无边框登陆窗口
(二)Qt制作简单配置窗口
(三)Qt简单使用表格
(四)Qt文件和json
(五)Qt使用QSocket做tcp简单客户端
(六)Qt中代码添加背景图

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

image

2.添加新文件

在头文件中导入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

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值