LiunxQT开发篇—QT网络编程TCP实现(三)客户端代码

2023-11-03

需要包含三个头文件

#include <QTcpServer>
#include <QTcpSocket>
#include <QString>

需要添加一个模块

QT       += core gui network

在这里插入图片描述

使用到了一个类(QTcpSocket)

QTcpSocket Class

声明一个对象

QTcpSocket *tcpSocket;

涉及到的信号:

tcpSocket:

connected()(This signal is emitted after connectToHost() has been called and a connection has been successfully established.)(此信号是在调用connectToHost()并成功建立连接之后发出的。)
readyRead()(This signal is emitted once every time new data is available for reading from the device’s current read channel.)(每当有新的数据可以从设备当前的读通道读取时,这个信号就会发出一次。)

客户端程序大致流程图

在这里插入图片描述

widget.cpp程序

#include "widget.h"
#include "ui_widget.h"
/*构造函数*/
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    tcpSocket =new QTcpSocket(this);
}
/*readyRead()信号执行的槽函数*/
void Widget:: connected_Slot()
{
    connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
}
void Widget:: readyRead_Slot()
{
    ui->recvEdit->appendPlainText(tcpSocket->readAll());
}
/*析构函数*/
Widget::~Widget()
{
    delete ui;
}
/*按键槽函数*/
void Widget::on_connBt_clicked()
{
    tcpSocket->connectToHost(ui->ipEdit->text(),ui->portEdit->text().toUInt());
    connect(tcpSocket,SIGNAL(connected()),this,SLOT(connected_Slot()));
    qDebug() << "client send connect";
}
void Widget::on_closeBt_clicked()
{
    tcpSocket->close();
    qDebug() << "client close success";
}

void Widget::on_sendBt_clicked()
{
    tcpSocket->write(ui->sendEdit->text().toLocal8Bit().data());
    qDebug() << "client send success";
}

main.cpp程序

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.setWindowTitle("客户端");
    w.show();

    return a.exec();
}

widget.h程序

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpSocket>
#include <QDebug>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    QTcpSocket *tcpSocket;
private slots:
    void on_connBt_clicked();
    void connected_Slot();
    void readyRead_Slot();
    void on_closeBt_clicked();
    void on_sendBt_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

注:

1、connect函数

函数声明
 bool QObject::connect ( const QObject * sender, const char * signal, 
		 const QObject * receiver, const char * member ) [static]
参数:

(1)const QObject * sender
填写对象名
(2)const char * signal
填写信号名。
格式:SIGNAL(xxx),xxx填写信号名。
(3)const QObject * receiver
this关键字是一个指向对象自己的一个指针
(4)const char * member
填写槽函数名。
格式:SLOT(xxx),xxx填写槽函数名。

例子:
connect(tcpServer,SIGNAL(newConnection()),this,SLOT(newConnection_Slot()));

2、readAll函数

无参数。

从设备中读取所有剩余数据,并将其作为字节数组返回。
这个函数没有报告错误的方法;返回一个空的QByteArray可能意味着当前没有数据可供读取,或者发生了错误。

返回值:

成功读取,将数据作为字节数组返回。失败读取,返回一个空的QByteArray可能意味着当前没有数据可供读取,或者发生了错误。

例子:
/*将读取的数据存入buf*/
QString buf;
buf = tcpSocket->readAll();

3、connectToHost函数

尝试连接到给定端口上的主机名。协议参数可以是尝试连接到端口上的地址。

函数声明:
virtual void connectToHost(const QHostAddress &address, quint16 port, OpenMode openMode = ReadWrite)
参数:

(1)address
接入的ip地址。格式如:192.168.1.1
(2)port
端口号。如果“port”为“0”,则自动选择端口。
(3)OpenMode
可不写
注:connectToHost是一个重载函数,还有一个函数类型。

例子:
tcpSocket->connectToHost(ui->ipEdit->text(),ui->portEdit->text().toUInt());

4、write函数

(Writes data from a zero-terminated string of 8-bit characters to the device. Returns the number of bytes that were actually written, or -1 if an error occurred.)
(将以0结束的8位字符串的数据写入设备。返回实际写入的字节数,如果发生错误则返回-1。)

函数声明
write(const char *data)
返回值

返回实际写入的字节数,如果发生错误则返回-1。

例子:
 tcpSocket->write(ui->sendEdit->text().toLocal8Bit().data());

5、close

关闭设备。首先发出aboutToClose(),然后关闭设备并将其OpenMode设置为NotOpen。错误字符串也被重置。

例子:
tcpSocket->close();

实现效果:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LiunxQT开发篇—QT网络编程TCP实现(三)客户端代码 的相关文章

随机推荐

  • ReactiveUI 入门

    ReactiveUI入门 ReactiveUI使您能够使用MVVM模式构建反应式 可测试和可组合的UI代码 请参阅我们的ReactiveUI文档手册 我们还有一个完整的跨平台演示应用程序 入门 要开始使用 请访问我们的 安装 页面 在引人注
  • CG v-光照着色探索:Educoder

    CG v 光照着色探索 Educoder 光照着色是计算机图形学中一个关键的概念 它可以使得渲染出的场景更加逼真和具有立体感 在本文中 我们将深入探讨光照着色的原理和实现 并使用源代码来演示 首先 让我们来了解一下什么是光照着色 在计算机图
  • 隐马尔可夫模型(HMM)攻略

    隐马尔可夫模型 Hidden Markov Model HMM 最初由 L E Baum 和其它一些学者发表在一系列的统计学论文中 随后在语言识别 自然语言处理以及生物信息等领域体现了很大的价值 平时 经常能接触到涉及 HMM 的相关文章
  • [Spring Boot]03 Maven常用的打包(packaging)类型

    目录 什么是pom xml Maven常用的打包类型 jar war pom 什么是pom xml POM是项目对象模型 Project Object Model 的简称 它是Maven项目中的一个XML文件 pom xml 此文件用于管理
  • 常见编译Warning的解决方法

    Warning 1 always inline redefined enabled by default 意思是 always inline 重复定义了 位置分别是gcc arm none eabi 4 8 4 include fixed
  • java实体类根据某个或多个属性排序

    public class ListUtils 对list的元素按照多个属性名称排序 list元素的属性可以是数字 byte short int long float double等 支持正数 负数 0 char String java ut
  • cv2.resize

    import cv2 img cv2 imread home img python png cv2 IMREAD UNCHANGED print Original Dimensions img shape scale percent 60
  • shell脚本学习-04

    65 IFS 文本分隔符 默认的文本分隔符是 但是可以手动设置为其他的 如 cities Delhi chennai bangaluru kolkata old ifs IFS IFS for place in cities do echo
  • Chrome 浏览器的 PDF 插件使用了 Foxit PDF SDK

    Chrome 浏览器的 PDF 插件使用了 Foxit PDF SDK 2010年8月22日 Chrome的内置PDF插件实际上有使用Foxit的PDF SDK 如果你查看这个网页会找到Chromium的一些PDF功能多次用到Foxit的S
  • 【C++】C++的四种类型转换

    文章目录 一 隐式类型转换和显示类型转换 二 C 的四种类型转换 2 1 static cast 相似转化 2 2 reinterpret cast 不同类型转化 2 3 const cast 去除const属性 2 4 dynamic c
  • 利用枚举类型变量求从5种颜色球中取3个不同颜色球的取法

    利用枚举类型变量求从5种颜色球中取3个不同颜色球的取法 C程序设计 第二版 谭浩强 著 11 9 例11 3 口袋里有红 黄 蓝 白 黑5种颜色的若干个 每次从口袋中取出3个球 问得到3种不同色的球的可能取法 输出每种排列的情况 程序 在V
  • CASAIM与南京航空航天大学在自动化叶片曲面分析系统开展合作,推动航空航天发动机零部件自动化3D检测进程

    近期 CASAIM与南京航空航天大学在自动化叶片曲面分析系统展开深入合作 充分发挥双方在航空航天和智能检测领域优势 共同推动航空航天发动机零部件自动化3D检测进程 南京航空航天大学创建于1952年10月 是新中国自己创办的第一批航空高等院校
  • 【python】python求解矩阵的转置(详细讲解)

    博 主 米码收割机 技 能 C Python语言 公众号 测试开发自动化 获取源码 商业合作 荣 誉 阿里云博客专家博主 51CTO技术博主 专 注 专注主流机器人 人工智能等相关领域的开发 测试技术 python求解矩阵的转置 详细讲解
  • pytorch:交换tensor的维度

    在pytorch中 tensor有两个成员函数可以实现维度交换 分别时transpose 和permute transpose 该函数可以交换tensor的任意两个维度 但是该函数一次只有两个参数 即一次只能交换两个维度 import to
  • Solr 检索结果集List<SolrDocument> 转换为指定业务对象总结

    前提说明 从solr结果集中取数据 取到了结果集 但是结果集是一个map 而我想要得到的是一个对象 怎么处理呢 我总计如下三种方法 第一种 solrDocument中提供了一个获取每个field对应值的方法 使用此方法获取所有的field对
  • SWOT、PDCA、SMART……这些对你绝对有用!

    企业的成功一定是有办法的有技巧的 君子性非异也 善假于物也 SWOT分析法帮助企业从四个维度进行综合分析 正确识别自己在市场中所处的地位 扬长避短 聚焦优势资源 在500强工作的员工 SWOT分析是必须具备的技能 特别是做市场的员工 全面的
  • [orin] nvidia orin 上安装 pytorch 和 torchvision 实操

    请看这个博主写的链接 写的非常好 目前我已经安装成功了 不同的是我是在Anaconda虚拟环境中安装的 原博客链接 https blog csdn net beautifulback article details 125717717 这次
  • TEASER-plusplus 安装

    https github com MIT SPARK TEASER plusplus 下载https codeload github com MIT SPARK TEASER plusplus zip v2 0 下载GoogleTest太慢
  • 测试开发概念篇

    目录 前言 几个常见的名词 需求 什么是BUG 测试用例 软件生命周期 开发模型 瀑布模型 螺旋模型 增量和迭代模型 敏捷模型 前言 什么是软件测试 软件测试就是验证产品特性是否满足用户需求 开发软件是为了盈利 必须满足用户才会盈利 测试和
  • LiunxQT开发篇—QT网络编程TCP实现(三)客户端代码

    需要包含三个头文件 include