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

添加新文件
在头文件中导入qtcpsocket

之后定义成员函数用于发送和接收数据
Qt封装的socket使用的是信号槽监听接收到的数据
所以需要添加监听

使用的传输格式
报文长度8字节字符串 + base64转码的json报文

头文件
#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
