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

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

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

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

头文件
1#ifndef TCPSOCKET_H 2#define TCPSOCKET_H 3#include<QTcpSocket> 4 5class TcpSocket 6{ 7// Q_OBJECT 8public: 9 TcpSocket(QString &ip, quint16 port); 10 // 原始数据做base64转码发送 11 void sendData(QString data); 12 // 读取数据需要做同样操作 13 QByteArray readData(); 14 ~TcpSocket(); 15 QTcpSocket* m_tcp; 16private: 17 18}; 19 20#endif // TCPSOCKET_H
源文件
1#include "tcpsocket.h" 2 3 4TcpSocket::TcpSocket(QString &ip, quint16 port) 5{ 6 m_tcp = new QTcpSocket(); 7 m_tcp->connectToHost(ip, port, QTcpSocket::ReadWrite); 8} 9 10void TcpSocket::sendData(QString data) 11{ 12 // 数据做base64转码 13 QByteArray base64 = data.toUtf8().toBase64(); 14 QString le; 15 // 预留8字节保存长度 16 le.sprintf("%08d", base64.size()); 17 // 拼接数据 报文长度+报文 18 base64 = le.toUtf8() + base64; 19 // 发送数据 20 m_tcp->write(base64.data(), base64.size()); 21 22} 23 24QByteArray TcpSocket::readData() 25{ 26 char buf[9]={0}; 27 // 每次取8个字节长度 28 m_tcp->read(buf, 8); 29 int len = atoi(buf); 30 // 保存数据缓冲区 31 char data[len+1] = {0}; 32 // 读取指定长度 33 m_tcp->read(data, len); 34 // base64转码 35 QByteArray row = QByteArray::fromBase64(data); 36 return row; 37} 38 39 40TcpSocket::~TcpSocket() 41{ 42 delete m_tcp; 43}
码云代码位置 https://gitee.com/YiZhiLuGuoDeXiaoMaNong/personnel-management
