UDP 一对一聊天 多线程

Toolformer:大模型如何自学使用工具?Agent开山之作深度解读 大语言模型(LLM)在文本生成和理解方面展现出强大能力,但其知识受限于训练数据,存在信息滞后、精确计算困难等固有缺陷。为解决这一问题,研究者探索了让模型与外部工具交互的技术路径,其核心原理在于将工具调用格式化为模型可理解的序列,并通过数据驱动的方式让模型掌握这一模式。这一技术价值在于,它使模型从封闭的文本世界走向开放系统,具备了动态扩展能力边界、获取实时信息与执行精确操作的可能。其应用场景广泛,包括但不限于智能问答、数据分析、自动化工作流等需要结合外部知识或服务的领域。Meta AI 在2023年提出的 * 阅读详情
//发送类
package com.tencent.UDP;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;

public class TalkSend implements Runnable {
    DatagramSocket socket = null;
    BufferedReader reader = null;
    DatagramPacket packet = null;

    private int fromPort;
    private String toIp;
    private int toPort;

    public TalkSend(int fromPort , String toIp , int toPort) {
        this.fromPort = fromPort;
        this.toIp = toIp;
        this.toPort = toPort;
        try {
            socket = new DatagramSocket(fromPort);
            reader = new BufferedReader(new InputStreamReader(System.in));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    @Override
    public void run() {
        while(true) {
            try {
                String msg = reader.readLine();
                System.out.println("我:" + msg);
                byte[] data = msg.getBytes();
                packet = new DatagramPacket(data , 0 , data.length ,
                        new InetSocketAddress(toIp , toPort));
                socket.send(packet);
                //发送完之后再结束
                if(msg.equals("bye")) break;
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        socket.close();
    }
}
//接收方
package com.tencent.UDP;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable {

    DatagramSocket socket = null;

    private int port;
    private String msgFrom;

    public TalkReceive(int port , String msgFrom) {
        this.port = port;
        this.msgFrom = msgFrom;
        try {
            socket = new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while(true) {
            try {
                byte[] container = new byte[1024];
                DatagramPacket packet = new DatagramPacket(container , 0 , container.length);
                //阻塞接收
                socket.receive(packet);
                byte[] res = packet.getData();
                String data = new String(res , 0 , res.length);
                System.out.println(msgFrom + ":" + data);
                if(data.equals("bye")) break;
            } catch ( Exception e) {
                e.printStackTrace();
            }
        }
        socket.close();
    }
}
//教师用户:开启一个发送线程和一个接收线程
package com.tencent.UDP;

public class TalkSender {


    public static void main(String[] args) {

        new Thread(new TalkSend(7777, "localhost" , 9999)).start();

        new Thread(new TalkReceive(8888 , "老师")).start();


        System.out.println("--------12312312-------");

    }
}
//学生用户:开启一个发送线程和一个接收线程
package com.tencent.UDP;

public class TalkReceiver {

    public static void main(String[] args) {

        new Thread(new TalkSend(5555, "localhost" , 8888)).start();

        new Thread(new TalkReceive(9999 , "学生")).start();
    }
}

END 测试:

基于udp协议 -- 简单一对一聊天demo udp协议 udp协议, 与tcp协议同属于传输层. 是一种不安全的, 不面向连接的一种信息传输协议 该协议基于数据套接字(DatagramSocket )发送二进制数据包(DataGramPacket, 该数据包记录有接收方ip与端口), 与IO流无关 该协议单次传输数据不能过大. 与tcp相比, 性能更高. 主要api - DatagramSocket - DataGramPacket 涂... 阅读详情

相关推荐

基于UDP协议实现一个简陋的一对一的聊天室

首先明白UDP相关知识: https://blog.youkuaiyun.com/qq_40301026/article/details/88623353 https://blog.youkuaiyun.com/qq_40301026/article/details/88605688 首先先实现一方接受,一方发送的能力: 这是发送方: 思路: 1.使用DatagramSocket指定端口,...

MADE_哒哒 1675

网络编程---使用UDP与多线程,实现聊天功能(详细大全)

若使用网络编程UDP实现聊天功能,我们首先要创建两个线程 线程1:发送消息的线程 线程2:接受消息的线程 除此之外,我们还需要两个用户来进行互相沟通(互相传递信息) 用户1:发送和接受信息 用户2: 发送和接受信息 用户1向用户2发送信息: 从用户1端口--->根据IP+对方的端口号 定位到具体的人--->用户2接受到消息 用户2向用户1发送信息: 从用户2端口--->根据IP+......

weixin_51351637的博客 1860

java 通过UDP实现一对多聊天室

使用java通过UDP实现一对多聊天室,而且有窗口

UDP实现点对点聊天(多线程)-C语言

UDP实现点对点聊天(多线程)-服务器端 //**********操作步骤********************// //1、编译:gcc UDPM.c -lws2_32 -lmycon -lwinmm -o UDPM.exe //2、运行:UDPM #include <stdio.h> #include <winsock2.h> //#include <mycon.h> int isrunning = 1; struct sockaddr_in clientaddr;

qq_41301428的博客 4568

简单UDP协议1对1聊天程序

使用UDP数据报传输协议,实现简单1对1聊天

JAVA基于UDP通信的一对一聊天

端口监听、消息的发送与接收,这个例子并没有界面,大家可以看看,原理及流程清楚了可以自己搭建一个界面实现。

《C++》基础入门——多线程:一对一聊天实例

并行和并发 并行 同一时间段内交替运行多个进程(线程) 在操作系统中是指,一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。 并行也指8位数据同时通过并行线进行传送,这样数据传送速度大大提高,但并行传送的线路长度受到限制,因为长度增加,干扰就会增加,数据也就容易出错。 对于单核计算机操作系统中的并行,指的是同时存在于内存中的多道作业都处于运行状态。实际上都是宏观上并行,微观上...

WaitFoF 1809

RDKit实战:5分钟搞定药物分子相似性分析(附Python代码)

本文提供了一套基于RDKit的快速药物分子相似性分析实战指南。通过Python代码演示,从环境搭建、分子指纹(如Morgan指纹)计算到Tanimoto相似性排序与可视化验证,帮助研究者在5分钟内完成从海量化合物库中精准筛选潜在活性分子的全流程,提升药物发现效率。

weixin_29193359的博客 314

MFC多线程

MFC开始多线程工作,简单记录两种方式 1.使用 AfxBeginThread()函数,中间参数不管了,刚开始只记录写法 使用这个函数创建的多线程,线程处理函数一定要声明为以下格式,要不函数写出花来也没有用: UINT ThreadProc(LPVOID wParam); UINT ThreadProc(LPVOID wParam) //函数名可以自定义 { return 0; //一定有个返回...

m0_37837218的博客 315

一次HTTP完整得请求过程

一次HTTP完整的请求过程 一,大致流程: 根据域名和DNS解析到服务器的IP地址(DNS+CDN) 通过ARP协议获得IP地址对应的物理机器得MAC地址 浏览器对服务器发起三次握手 建立TCP连接后发起HTTP请求报文 服务器响应HTTP请求,将响应报文返回浏览器 短连接情况下,请求结束通过TCP四次挥手关闭连接,长连接在没有访问服务器得若干时间后,进行连接关闭 浏览器得到响应信...

qq_40760617的博客 344

手把手用LTspice仿真运算放大器电路:从虚短虚断到频响分析

本文通过LTspice仿真软件,手把手教你从搭建基础运算放大器电路开始,验证虚短虚断原理,并逐步深入频响分析与稳定性探究。内容涵盖反相/同相放大器、积分器仿真,导入真实运放模型进行蒙特卡洛分析,以及利用交流分析和波特图评估电路性能,帮助工程师和学生将抽象理论转化为直观、可测量的仿真结果,提升电路设计实战能力。

salt9的博客 1094

JAVA 多线程实现简单UDP一对一聊天

关于 java 多线程 实现udp一对一聊天

weixin_41181915的博客 3800

[华为ensp]双核心的园区网

(给部分只会emm......借鉴的朋友提个醒,在group-member e0/0/2 to e0/0/20是所选,所以到了p l t那会给2-20端口都配置上trunk,别紧张,不是你问题)完成上述配置后,PC1可以ping通HTTP2服务器,Client1可以访问HTTP2服务器的HTTP站点,如果不能就要检查上述是否正确。本次实验主要目的是采用双核心的冗余网络,采用MSTP和VRRP技术,在核心层交换机上配置SC1上配置OSPF协议。SC1交换机上配置VRRP。在SC1上配置DHCP。

2301_78859499的博客 1416

学习记录328@Java 多线程下基于UDP的一对一聊天实现

如果是单线程,聊天的发送和接收必须有顺序,为了更符合常规,采用多线程实现发送和接收数据,这样就可以了 //接收线程 package com.dream.udp02; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class ReceiveThread extends Thread{ DatagramSocket socket; public .

教练我想学编程 160

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9734

如何使用AKShare作为OpenBB的数据源

`openbb_akshare`项目是 OpenBB 的数据源扩展。可以用于查询A股和港股数据

FinAnalyzer金融分析工具 3196

java自学day1-网络编程-使用udp,多线程实现一对一聊天

模拟发送端: package cn.xqh.net; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; pu

WHUT_XQH的博客 255

【RH850/U2A】:HSM与APP通信(中断方式)

HSM与APP通信(中断方式)

1994

Java网络编程之UDP编程

文章目录UDP通信编程方法详解发送端接收端实现教师和学生一对一网络聊天 UDP通信编程方法详解 发送端 发送端需要做到以下几件事: 1、使用DatagramSocket指定端口,创建发送端 2、准备数据,转成字节数组 3、封装成DatagramPacket包裹,需要指定目的地 4、发送包裹 5、释放资源 简要的示例如下: public class UdpClient { public st...

NinoSun的博客 307

23、电生理与CSD分析:探索大脑活动的前沿技术

本文介绍了电生理与电流源密度(CSD)分析在探索大脑活动中的前沿应用。从电生理技术的发展现状,到局部场电位(LFPs)的起源与解释,重点阐述了CSD分析的原理、实验方法及其在绘制皮层兴奋流、解析突触输入和研究自发振荡中的广泛应用。文章还总结了该领域的优势与挑战,并展望了技术改进、多模态融合、数据分析创新及临床拓展的未来方向,展示了这些技术在揭示大脑功能机制中的关键作用。

Apple的专栏 121

深度学习工具包 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")

Java_185_网络编程_UDP套接字_DatagramSocket_数据流类型模拟Data(Intput/Output)_引用类型模拟Object_模拟聊天_封装聊天加入线程实现对讲_Thread

基本流程模板 Client package Ntework; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; /** * 基本流程 * 发送端 * 1.使用DatagramSocket创建发送端,指定端口 * 2.准备数据转成字节数组 * 3.分装成DatagramPacket包裹,.

pmcasp的博客 150

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

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

【手把手教学】Java TCP编程三部曲:单工→双工→多线程演进

本文介绍了Java网络编程中的TCP和UDP通信实现方法。在TCP部分,详细讲解了ServerSocket和Socket类的基本使用,包括一对一聊天、多线程优化及群聊功能的实现。UDP部分则介绍了DatagramSocket和DatagramPacket的基础通信以及多线程实现。此外,还涵盖了HTTP连接和文件下载操作,以及InetAddress类的域名解析功能。文章通过具体代码示例,展示了从基础通信到多线程优化的完整实现过程,为Java网络编程提供了实用参考。

qq_52506743的博客 962

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

基于UDP的P2P聊天工具——0.1

基于UDP的P2P聊天工具——简约版 简介: 1)这是一个windows的P2P聊天工具; 2)它支持局域网内1对1发送文字消息; 3)它的界面是dos控制台界面; 相关内容: 1)入门级UDP套接字编程; 2)UDP的connect函数; 3)入门级windows多线程; 一、入门级UDP套接字编程 作为套接字,它包含两个要素:协议和地址。所以,在网络编程中,一般的套路

woshichenjiacheng的博客 642

Java网络编程(三):UDP编程

Java网络编程(三):UDP编程 本文涉及到的源码以及打包供参考:链接:https://pan.baidu.com/s/1CosT1-Y-G8USVcfSMOqXcw 提取码:4fci @author:超爱学习的可琛同学 对于本博客你将学习: UDP与TCP基本概念 简单实现UDP编程 实战:老师学生一对一聊天室(运用多线程) 1.UDP与TCP基本概念 UDP TCP ...

weixin_43070331的博客 246

用Win32 SDK & C++实现的一个简易版局域网聊天软件

效果图:     程序简要说明: 程序名称:简易局域网聊天工具 开发方式:Win32 SDK 、C++ 开发环境:Visual C++ 6.0 功能: 支持一对一聊天、传送、接收文件,支持群聊,实时好友列表,简陋的消息提示。 缺点:用户界面不友好,排错功能较差,一个IP地址只能对应一个程序实例。     程序框架的来源: 在局域网实现一个聊天工具,主要需要解决的是

劉俊的专栏 4713

网络实训项目:基于Java的网络聊天软件设计与实现

网络实训项目:基于Java的网络聊天软件设计与实现 去发现同类优质开源项目:https://gitcode.com/ 项目简介 本项目是网络实训的一个实践作品,旨在设计和实现一个基于Java的网络聊天软件。本软件模拟了常见的即时通讯软件,如QQ的聊天功能,通过运用Java编程语言,实现了图形化用户界面、事件处理、多线程编程、Socket通信及数据库存储等关键技术。用户可以通过该软件进行一对一的私聊...

gitblog_06721的博客 618
上一篇: IO流 之 文件上传
下一篇: 通过URL解析下载资源
ଳxin
博客等级 码龄8年 83粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值