【QT】QT的学习:QUdpSocket的使用

【QT】UDP通信QUdpSocket(单播、广播、组播) UDP是无连接、不可靠、面向数据报(datagram)的协议,可以应用于对可靠性要求不高的场合。与TCP通信不同,UDP通信无需预先建立持久的socket连接,UDP每次发送数据报都需要指定目标地址和端口。QUdpSocket以数据报传输数据,而不是以连续的数据流。发送数据报使用函数,数据报的长度一般少于512字节,每个数据报包含发送者和接收者的IP地址和端口等信息。UDP数据接收,首先要使用绑定一个端口,绑定端口后,socket的状态会变为已绑定状态“BoundState”。 阅读详情

简单的介绍使用QUdpSocket进行收发报文的用法:

发送方:

1.在Pro中添加QT += network

2.在头文件中添加:

class QUdpSocket;

private:
    QUdpSocket *senders;

3.在 c文件的构造函数中添加对象的初始化:

senders = new QUdpSocket(this);

4.在ui文件中添加一个button并转到槽:

void sender::on_pushButton_clicked()
{
    QByteArray datagram = "hello word!";
    senders->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast,45454);
}

发送方逐步完成,只要点击按钮就会发送广播信息。


接收方:

1.在Pro中添加QT += network

2.在头文件中添加:

class QUdpSocket;

private slots:
    void processPendingDatagram();

private:

QUdpSocket *receiver;

在c文件的构造函数中添加:

 receiver = new QUdpSocket(this);
    receiver->bind(45454,QUdpSocket::ShareAddress);
    connect(receiver,SIGNAL(readyRead()), this,SLOT(processPendingDatagram()));


void Recevier :: processPendingDatagram()
{
    while(receiver->hasPendingDatagrams())
    {
        QByteArray datagram;
        datagram.resize(receiver->pendingDatagramSize());

        receiver->readDatagram(datagram.data(),datagram.size());
        ui->label->setText(datagram);
    }
}


注意:

一开始的时候使用connect函数:

connect(receiver,&QUdpSocket::readyRead, this,&Receiver::processPendingDatagram);

在QT creator 4上变异没有问题,但是一旦一直到QT5上就会报:

 'receiver' is not a class or namespace

 connect(receiver, &QUdpSocket::readyRead, this,&receiver::processPendingDatagram);


不得已在QT5上修改成SIGNAl以及SLOT的形式。能够编译成功。


Qt —UDP通信QUdpSocket 简介 +案例 UDP是无连接、不可靠、面向数据报(datagram)的协议,可以应用于对可靠性要求不高的场合。与TCP通信不同,UDP通信无需预先建立持久的socket连接,UDP每次发送数据报都需要指定目标地址和端口。QUdpSocket以数据报传输数据,而不是以连续的数据流。发送数据报使用函数数据报的长度一般少于512字节,每个数据报包含发送者和接收者的IP地址和端口等信息。UDP数据接收,首先要使用绑定一个端口,绑定端口后,socket的状态会变为已绑定状态“BoundState”。 阅读详情

相关推荐

Qt开发:QUdpSocket的详解

QUdpSocket 是 Qt 提供的一个类,用于在应用程序中通过 UDP 协议(User Datagram Protocol) 进行网络通信。UDP 是一种无连接、非可靠但快速的传输协议,适用于音视频传输、游戏数据、局域网广播、组播等应用场景。

TechNomad的博客 2644

Qt网络编程:QUdpSocket

一、描述 UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报的无连接协议。当可靠性不重要时可以使用它。 QUdpSocket 是 QAbstractSocket 的子类,它可以发送和接收 UDP 数据报。 1.1、使用方式 使用这个类最常见的方法是使用bind()绑定到一个地址和端口,然后调用writeDatagram()和readDatagram()/receiveDatagram()来传输数据。 QAbstractSocket是QIODevice的子类。如果要使用标准 QIODevice

友善啊,朋友的博客 7433

【QT】数据广播(QUdpSocket类)

QT中的数据广播实现(QUdpSocket类)

计算机视觉爱好者 5026

Qt网络编程:QUdpSocket使用示例

一、收发数据报 1、发送数据报 udpSocket = new QUdpSocket(this); QByteArray datagram = "这是消息内容"; udpSocket->writeDatagram(datagram.data(), datagram.size(),QHostAddress::Broadcast, 45454);

友善啊,朋友的博客 4178

Qt5 UDP网络通讯详解

Qt5 UDP网络通讯详解

程序猿老樊的博客 3865

【QT开发】UDP套接字QUdpSocket类详解及实战应用

QUdpSocket 是 Qt 提供的一个功能强大且灵活的 UDP 套接字类,通过本篇文章的学习,你应该对 QUdpSocket 有了全面的理解,能够在自己的项目中正确使用它。QUdpSocket 在用户界面中帮助你更好地实现无连接、快速数据传输的网络通信,实现实时和互动式的网络应用,有助于创建用户友好和高效的网络应用场景。

科技改变人类,技术成就未来 2369

通俗易懂玩QT:QUdpSocket学习

QT之QUdpSocket学习 最近,因为公司的项目要求,需要用到 socket 的 udp 通信协议,特意学习了一下,这里分享给大家。 一、QT 的 socket 家族 这里首先给大家介绍一下 QT 的 socket 家族,结构图大致如下图所示: 最主要的是 QAbstractSocket 类,它是 QUdpSocket 和 QTcpSocket 的父类,QTcpSocket 类又包含了两个子类 QSctpSocket 和 QSslSocket。 二、QUdpSocket 的使用 以下为使用步骤:

混子还在路上 4397

拯救者R7000用户实测:用华为电脑管家11.0版搞定MatePad Pro多屏协同(附驱动与显卡避坑指南)

本文详细介绍了如何在非华为笔记本联想拯救者R7000上安装华为电脑管家11.0版,实现与MatePad Pro的多屏协同功能。从驱动优化到显卡配置,提供了全面的避坑指南和实用技巧,帮助用户解决连接失败等常见问题,提升跨设备生产力体验。

weixin_30788619的博客 398

Qt学习笔记:Qt5.9 QudpSocket类总结 成员函数文档 VS2015+QT编程

QUdpSocket类 环境配置 头文件:#include<QUdpSockey> qmake: QT+=network 继承于:QAbstractSocket 注:此类中所有的函数都是可重入函数(允许被递归调用的函数。函数的递归调用是指当一个函数正被调用尚未返回时,又直接或间接调用函数本身。)。 (qmake在pro文件中添加,直接将QT+=network添加上即可,如果是VS2015环境,则在创建时勾上Network模块即可。QT VS TOOLS中的Qt Project Sett

Flywithdawn的博客 1946

告别里程焦虑:手把手教你用MATLAB/Simulink仿真电动车AMT换挡规律(附代码)

本文详细介绍了如何使用MATLAB/Simulink仿真电动车AMT换挡规律,帮助解决里程焦虑问题。通过搭建完整的仿真系统,包括电机MAP图处理、Stateflow逻辑实现和动力性与经济性换挡曲线生成,优化电动车换挡策略以提升续航与性能。附带的代码示例和实用技巧使开发者能够快速上手并验证仿真结果。

weixin_26757925的博客 306

LabVIEW与三菱PLC通讯实战:ActiveX控件在FX5U上的应用技巧

本文深入探讨了如何利用三菱MX Component中的ActiveX控件,在LabVIEW中实现与FX5U系列PLC的高效、稳定通讯。文章从环境配置、ActiveX控件生命周期管理、数据读写性能优化及容错机制等实战角度,分享了构建工业级健壮通讯程序的核心技巧与架构设计思路。

qsc9012345的博客 889

Qt学习之路_6(Qt局域网聊天软件)

     在上2次文章Qt学习之路_5(Qt TCP的初步使用)   Qt学习之路_4(Qt UDP的初步使用) 中已经初步介绍了群聊功能和文件传输功能,这一节中主要在这个基础上加入一个私聊功能。   参考文献依旧是:《Qt及Qt Quick开发实战精解》一书中的第5个例子以及http://www.yafeilinux.com/ 网站上的源码。另外这次的私聊功能也是参考网友http://www...

weixin_34246551的博客 679

autodl云服务器使用中的conda源报错

通过find path -name filename找到.condarc文件,在autodl服务器中,一般在/root/.condarc。为了利用jypyter打开conda虚拟环境运行,需要下载ipykenel。这个报错是源的问题,在通过源获取包元数据时出现了HTTP 429错误。通过conda换源解决。修改.condarc文件,命令: vim .condarc。但这样还不能解决问题,得把报错中有问题的源注释掉。通过以下命令添加清华镜像源。把报错的链接源注释如下。

Ty_kilig的博客 1584

Qt网络编程(2):QUdpSocket的基本使用

0.前言 本文主要讲解 Qt UDP相关接口的基本应用,一些实践相关的后面会单独写。 UDP(用户数据报协议 User Datagram Protocol)是一种轻量级,不可靠,面向数据报的无连接协议。 UDP 是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发送端,UDP 传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端,UDP 把每个消息段放在队列中,应用程序每次从队列.

龚建波 3万+

【ESP32使用MAX98357播放音频】

在物联网和智能家居领域,音频播放功能越来越受到重视。ESP32作为一款功能强大的微控制器,结合MAX98357音频放大器模块,可以实现高品质的音频播放。本文将详细介绍如何使用ESP32的I2S接口通过MAX98357进行音频播放。

vor234的博客 7527

汇川H5U PLC 实现直线插补、圆弧插补、直线圆弧混合连续插补

使用汇川H5UPLC实现直线插补,圆弧插补,直线圆弧混合路径插补,通过示教可以走出复杂的路径,仅供参考学习。

weixin_39832501的博客 4775

【Qt 学习之路】QUdpSocket发送与接收消息

QUdpSocket(通信套接字),UDP(User Datagram Protocol,用户数据报协议)UDP是一个轻量级、不可靠、面向数据报的、无连接的协议,多用于可靠性要求不严格,不是非常重要的传输。QUdpSocket类继承自QAbstractSocket,用来发送和接收UDP数据报,”Socket”即套接字,套接字即IP地址+端口号。其中IP地址指定了网络中的一台主机,二端口号则指定了该主机上的一个网络程序,使用套接字即可实现网络上的两个应用程序之间的通信。

沙师弟专栏 1万+

简要介绍 | 雷达穿墙成像及其应用场景

本文简要介绍了雷达穿墙成像技术的原理、研究现状、挑战与未来展望,希望能为相关领域的研究与应用提供参考。具有广泛的应用前景。本文将详细介绍雷达穿墙成像的原理,以及其在不同应用场景中的实践。逆时偏移算法(Reverse-Time Migration, RTM)雷达穿墙成像技术是一种先进的遥感技术,具有。的能力,可用于探测室内目标。安全与救援、建筑结构检测等领域。雷达穿墙成像技术的核心原理是。是Green函数,表示从接收点。雷达穿墙成像及其应用场景。雷达穿墙成像及其应用场景。目标识别与定位准确性。

NLOS的博客 2232

C++ Qt开发:QUdpSocket网络通信组件

与`QTcpSocket`组件功能类似,`QUdpSocket`组件是 Qt 中用于实现用户数据报协议(UDP,User Datagram Protocol)通信的类。UDP 是一种无连接的、不可靠的数据传输协议,它不保证数据包的顺序和可靠性,但具有低延迟和简单的特点。

微软技术分享 8652

**YOLOv11性能突破:基于YOLOv10-PSA注意力机制的目标检测革命性升级**

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

m0_71589036的博客 195

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Qt中使用QUdpSocket类实现UDP通信

在QT中使用QUdpSocket类用于实现UDP通信,它从QAbstractSocket类继承,因而与QTcpSocket共享大部分的接口函数。主要区别是QUdpSocket以数据报传输数据,而不是以连续的数据流。发送数据报使用函数QUdpSocket::writeDatagram(),数据报的长度一般不少于512字节,每个数据报包含发送者和接收者的IP地址和端口等信息。 要进行UDP数据接收,...

Rock N' Roll Forever 5717

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C++ Qt开发:QUdpSocket实现组播通信

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QUdpSocket`组件实现基于UDP的组播通信。组播是一种一对多的通信方式,允许一个发送者将数据报文发送到多个接收者,这些接收者通过共享相同的组播IP地址进行通信。在设置组播地址时需要注意,该范围被限制在`239.0.0.0~239.255.255.255`以内,这是预留给组播的地址范围。

微软技术分享 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Qt中使用QUdpSocket实现UDP通信方法

1. 简介 UDP(User Datagram Protocol,用户数据报协议)是轻量的、不可靠的、面向数据报(datagram)、无连接的协议,可以用于对可靠性要求不高的场所。 在使用Qt开发上位机或者应用程序中,需要使用到UDP通信,需要预先建立持久的socket链接,UDP每次发送数据报都需要指定目标IP地址和端口。 2. QUdpSocket类所用到的接口函数: 函数 功能 ...

ZhangP.H的博客 5915

QT之Qudpsocket类的学习笔记

UDP: 1、用到网络的东西,必须修改工程环境变量,添加: QT  += core  gui network 2、用到类 QudpSocket ; Detailed Description The QUdpSocket class provides a UDP socket. UDP (User Datagram Protocol) is a lightweight, unreli

李东军博客 5633

Qt由入门到放弃-QNetWork之QUdpSocket

目录 一、 QUdpSocket基本概念和相关函数 二、QUdpSocket广播 三、QUdpSocket组播 一、 QUdpSocket基本概念和相关函数 QUdpSocket提供了UDP套接字API,用来接收和发送UDP数据报。 QUdpSocket类最通用的使用方式是:用bind()函数绑定一个IP地址和端口Port,然后调用writeDatagr...

bwangk的博客 2782
上一篇: 【QT】QT学习:如何定位在QT中使用socket绑定bind失败
下一篇: 【QT】QT程序移植:从linux上移植到Windows上出现一些错误以及编译问题
ipfpm
博客等级 码龄9年 98粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值