Qt使用QSocket做tcp简单客户端

隔壁老王 等级 1162 1 0

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

Qt使用QSocket做tcp简单客户端

添加新文件

在头文件中导入qtcpsocket

Qt使用QSocket做tcp简单客户端

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

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

所以需要添加监听

Qt使用QSocket做tcp简单客户端

使用的传输格式

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

Qt使用QSocket做tcp简单客户端

头文件

#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

收藏
评论区

相关推荐

HTTP协议与TCP,DNS , IP 协议的关系
在TCP/IP协议族中与HTTP密不可分的有3个协议,分别是IP、TCP和DNS。下面简单介绍下这3种协议。 1、IP协议         IP(Internet Protocol)网际协议位于网络层,几乎所有使用网络的系统都会用到 IP 协议。TCP/IP 协议族中的 IP 指的就 是网际协议,"IP"和"IP地址"是不同的,"IP"其实是一种协
HTTP面试题精选_langsiming的博客
1. 简述下TCP三次握手的过程,并解释采用3次握手建立连接的原因? 1. 客户端发送建立连接请求,携带信息syn 1,seq X 第一次握手 2.
TCP/IP网络协议
1、  简述osi七层模型和TCP/IP五层模型 一、OSI参考模型         今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。  1、OSI的来源         OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,
记一次基于ECS搭建FTP服务_红烧土豆泥的博客-CSDN博客
基于ECS搭建FTP服务简介: FTP(File Transfer Protocol):即文件传输协议,是TCP/IP协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器
阿里二面,面试官居然把 TCP 三次握手问的这么细致
TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度。看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了。本文会围绕,三次握手和四次挥手相关的一些列核心问题,分享如何更准确的回答和应对常见的面试问题,以后面对再刁钻的面试官,你都可以随意地跟他扯皮了。 面试TCP的意义
[前端必知 ]HTTP or TCP/IP 基础
<section id"nice" datatool"mdnice编辑器" datawebsite"https://www.mdnice.com" style"fontsize: 16px; padding: 0 10px; wordspacing: 0px; wordbreak: breakword; wordwrap: break
聊聊dubbo协议
协议协议通俗易懂地解释就是通信双方需要遵循的约定。我们了解的常见的网络传输协议有tcp、udp、http等。再到我们常用的基础组件,一般来说client端与server端也有相应的协议,如redis、mysql、zookeeper等都是各自约定的私有协议,同样今天标题中的dubbo协议也是一种私有协议,他们都是应用层协议,基于tcp或udp设计。
tcp的三次握手四次挥手
tcp的三次握手流程: 在tcp/ip协议中,tcp协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送SYN包【synj】到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到SYN包,必须确认客户的SYN(ackj1),同时自己也发送一个SYN包(syn
windows中 redis server 双击闪退
错误重现bash 进入redis安装目录执行以下命令redisserver.exe redis.windows.conf报错: [19572] 01 May 21:13:17.815 Creating Server TCP listening socket :6379: listen: Unknown error 解决方法:修改 redis.windows
肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁
系列导读 本文是 【网络知识扫盲】专栏的第三篇。今天要给大家介绍的一个 Unix 下的一个 网络数据采集分析工具 \ Tcpdump,也就是我们常说的抓包工具。与它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump 则只有命令行。由于我本人更习惯使用命令行的方式进行抓包,因此今天先跳过
Qt使用QSocket做tcp简单客户端
首先要在工程文件.por中添加network添加新文件在头文件中导入qtcpsocket之后定义成员函数用于发送和接收数据Qt封装的socket使用的是信号槽监听接收到的数据所以需要添加监听使用的传输格式 报文长度8字节字符串 + base64转码的json报文头文件cppifndef TCPSOCKETHdefine TCPSOCKETHinclude<Q
Java面试真题解析火爆全网,讲的太透彻了
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
BAT这种大厂履历意味着什么?面试篇
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
网络知识扫盲:扒开 TCP 的外衣,我看清了 TCP 的本质
后台回复关键字 “黑魔法”,即可获取明哥整理的《Python黑魔法指南》大家好,我是明哥。从上周开始,我开始了一个新的文章专栏:网络知识扫盲并写下了第一篇文章:从阅读和在看数来看,大家对这个系列还是比较期待的,所以这周我全身心地投入本篇文章的编写,用了整整 4个晚上的时间梳理了这篇关于 TCP 的重点知识,另外还参考 小林 coding 的文章配图,用了一天
ActiveMQ学习笔记01 - 客户端与服务器之间的传输连接 - 转载自CSDN博客
本文转自 ,如有侵权,请联系删除。ActiveMQ的cilenttobroker的连接,叫做传输连接(Transport connectors),brokertobroker间的连接,叫做网络连接(Network connectors)。ActiveMQ支持许多种客户端与服务器的传输连接。分别是TCP,NIO,UDP,SSL,HTTP(S),VM,AMQP,