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实现(三)客户端代码 的相关文章

  • Qt 人工鼠标点击无法正常工作

    小玩具应用程序可以在这里找到 http gist github com 517445 http gist github com 517445 我正在尝试将人工鼠标事件发送到小部件 我使用QApplication sendEvent为此 接下
  • 用 C++/Qt 编写的程序中的 RTF / doc / docx 文本提取

    我正在写一些程序Qt https en wikipedia org wiki Qt 28software 29 C 我需要从中读取文本微软Word https en wikipedia org wiki Microsoft Word RTF
  • 如何在 OS X 上的 Qt 应用程序中设置应用程序图标,足以进行分发?

    跟进这个答案 https stackoverflow com a 20918932 368896 to 这个问题 https stackoverflow com questions 20909341 what is the fastest
  • QT:删除QGridLayout中QLabel之间的空格

    我将一些具有不同颜色的 QLabels 添加到 QGridLayout 作为 QWidget 的布局 现在我在每个 Qlabel 与下一个 Qlabel 之间有一个间距 我想将其删除 我尝试将标签的边距设置为 0 将 GridLayout
  • QMainWindow 上的 Qt 布局

    我设计了一个QMainWindow with QtCreator s设计师 它由默认的中央小部件 aQWidget 其中包含一个QVBoxLayout以及其中的所有其他小部件 现在我想要的一切就是QVBoxLayout自动占据整个中央小部件
  • 如何声明一个带有成员函数指针的函数

    我有一个类 其中的成员变量指向库对象 class myClassA private libraryClass libraryObject 该库类发出事件 以字符串为特征 并提供一种机制 允许客户端类指定在发出事件时应调用的成员函数 因此在m
  • 将 jstring 转换为 QString

    我正在调用一个返回字符串的 Java 函数 QAndroidJniObject obj QAndroidJniObject callStaticObjectMethod
  • Mac OS X 上的 Qt 字体系列和样式

    我有一个基于 Qt PyQt 的 GUI 应用程序 在 Mac OS X 和其他平台 上运行 它允许用户选择字体并具有粗体和斜体选项的复选框 在更新到新的基于 Cocoa 的 Qt 时 用户发现QFontComboBox不再显示不同的字体样
  • Qt:不完整类型和前向声明的使用无效

    我有一些误解 A h ifndef A H define A H include B h class A public B Q OBJECT public A endif A cpp include A h A A B ui gt blan
  • 如何在 Qt 应用程序中嵌入 Python 解释器?

    有没有一种简单的方法可以将 Python 解释器嵌入到 Qt 应用程序中 如果可能的话 我希望有一个跨平台的解决方案 这就是目的PythonQt http pythonqt sourceforge net 它支持 Windows Linux
  • 连接到 QNetworkReply::error 信号

    我正在使用 Qt5 的新连接语法 QNetworkReply 有一个名为error http qt project org doc qt 5 0 qtnetwork qnetworkreply html error 2还有一个函数叫做err
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • QFileDialog::getOpenFileName 调试时崩溃,显然是由项目名称引起的?

    我遇到了一个让我非常困惑的问题 我在 Windows 7 上使用 Qt Creator 3 1 2 和 Qt 5 3 使用 MSVC 10 0 编译器和 Windows 8 1 调试工具中的 CDB 不确定我是否应该寻找特定于 Window
  • QThread - 使用槽 quit() 退出线程

    我想在线程完成运行时通知对象 但是 我无法让线程正确退出 我有以下代码 处理器 cpp thread new QThread tw new ThreadWorker connect tw SIGNAL updateStatus QStrin
  • QML MouseArea 将事件传播到按钮

    我正在开发一个应用程序 其菜单类似于 Android 版 Gmail 收件箱应用程序菜单 基本上 当您按下按钮打开菜单时 它就会滑入视图 用户可以将其滑开或按菜单上的按钮 对于滑动我使用了代码SwipeArea from kovrov ht
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se

随机推荐

  • 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