网络编程day2 UPD模型练习

自学Java day17 jvav网络编程 从jvav到架构师 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析。 这次笔者将使用 jvav 语言分别用套接字 upd协议连接 实现数据的网络传输。 使用upd协议连接: 服务器端: package com.web.io02; import java.io.*; import java.net.DatagramPack... 阅读详情

UDP客户端

#define SER_IP "192.168.110.119"
#define SER_PORT 8889
#define CLI_IP "192.168.110.119"
#define CLI_PORT 6667
int main(int argc, const char *argv[])
{
	//创建描述符
	int cfd = socket(AF_INET,SOCK_DGRAM,0);
	if (-1 == cfd )
	{
		perror("socket error");
		return -1;
	}
	printf("cfd = %d\n",cfd);
	//绑定端口号
	  //填充地址信息结构体
	struct sockaddr_in cin;//定义客户端的地址信息结构体
	cin.sin_family = AF_INET;
	cin.sin_port = htons(CLI_PORT);
	cin.sin_addr.s_addr = inet_addr(CLI_IP);

	socklen_t addrlen = sizeof(cin);
	  //绑定
	if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin)) == -1 )
	{
		perror("bind error");
		return -1;
	}
	printf("bind success\n");
	
	//发送接收数据
	char wbuf[128] = ""; //发送容器
	char rbuf[128] = ""; //接收容器
	  
	  //填充服务器信息结构体
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(SER_PORT);
	sin.sin_addr.s_addr = inet_addr(SER_IP);

	while(1) //循环发送数据并接收服务器返回的消息
	{
		bzero(wbuf,sizeof(wbuf));
		bzero(rbuf,sizeof(rbuf));

		//从终端上获取信息
		fgets(wbuf,sizeof(wbuf),stdin);
		wbuf[strlen(wbuf) - 1] = 0; //将回车换成文件结束符

		//将消息发送给服务器
		if(sendto(cfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&sin,sizeof(sin)) == -1)
		{
			perror("sendto error");
			return -1;
		}
		printf("发送成功\n");

		//接收服务器传来的消息
		if(recvfrom(cfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&addrlen) == -1)
		{
			perror("recvfrom error");
			return -1;
		}
		printf("接收到的消息为:[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);
	}
	//关闭描述符
	close (cfd);
	return 0;
}

UPD服务器

#define SER_IP "192.168.110.119"
#define SER_PORT 8889
int main(int argc, const char *argv[])
{
	//创建描述符
	int sfd = socket(AF_INET,SOCK_DGRAM,0);
	if(-1 == sfd)
	{
		perror("socket");
		return -1;
	}
	printf("sfd = %d\n",sfd);
	//绑定ip
		//填充地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(SER_PORT);
	sin.sin_addr.s_addr = inet_addr(SER_IP);

	if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1)
	{
		perror("bind error");
		return -1;
	}
	printf("bind success\n");

	//数据收发
	char rbuf[128] = "";
	struct sockaddr_in cin;
	socklen_t addrlen = sizeof(cin);
	while(1)
	{
		bzero(rbuf,sizeof(rbuf));
		//read(sfd,rbuf,sizeof(rbuf));
		recvfrom(sfd,rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&addrlen);
		printf("收到的消息为:%s\n",rbuf);
		
		strcat(rbuf,"*_*");
		if(sendto(sfd,rbuf,strlen(rbuf),0,(struct sockaddr*)&cin,sizeof(cin)) == -1)
		{
			perror("write error");
			return -1;
		}
		printf("发送成功\n");
	}
	//关闭套接字
	close (sfd);
	return 0;
}

效果图

芯片良率提升:从设计到制造的系统性工程实践 在半导体制造领域,良率是衡量生产效率和成本控制的核心指标,直接关系到芯片的经济效益与市场竞争力。其本质是合格芯片占总产出芯片的百分比,提升良率需要从设计源头到制造末端的全流程协同优化。从技术原理看,它涉及可制造性设计、工艺过程控制、缺陷检测与根因分析等多个复杂环节,尤其在先进制程下,随机缺陷和参数变异成为主要挑战。其技术价值不仅在于降低单颗芯片成本,更能加速产品上市、保障可靠性,并成为企业技术实力的关键体现。应用场景贯穿智能手机、数据中心、自动驾驶和人工智能等所有高端芯片领域。本文将结合【芯片制造】与【良率 阅读详情

相关推荐

PX4无人机PID调参实战:从零到稳定飞行的关键步骤

本文详细介绍了PX4无人机PID调参的实战步骤,从理解双环控制结构到实战调参三部曲,帮助飞手解决飞行抖动、电机发热等常见问题。通过分析飞行日志、调整速率环P值、引入积分I和微调角度环与微分D,实现从零到稳定飞行的关键跨越,是无人机飞控调试的必修课。

weixin_29269441的博客 527

python学习day31 网络编程2 UPD协议 黏包问题

http://www.cnblogs.com/Eva-J/articles/8244551.html#_label4 upd 服务端: import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 建立一个socket对象, # 指定以UDP协议的形式来连接 sk.bind(('127.0.0.1',8080)) #...

weixin_30825581的博客 119

Confluence安装Drawio插件

记录confluence安装drawio插件步骤

devotedwife的博客 7378

Qt day7 UPD/TCP网络编程

widget.h:套接字头文件 槽函数 套接字。

m0_58443060的博客 534

U8-固定资产月末结账报错:BOF或EOF中有一个是真

度了下,发现此问题一般是由于fa_Vtsobject表缺少对应月份的记录导致,补上即可,但是查看发现此表记录正常。 跟踪后发现定位到以下语句: select * from AccInformation where cSysID = N'FA' and cName =N'bVoucherApply'上述语句执行后没有任何记录显示,但是在正常的账套执行是有记录的,那有可能就是记录丢失导致,执行以下

guizhouakun的博客 5917

从ViT到CLIP:OpenAI如何用4亿张图‘教会’AI看懂世界?一次讲透对比学习与Prompt工程

本文深入解析OpenAI的CLIP模型如何通过4亿图文对的对比学习实现跨模态理解,详细探讨了对比学习、数据构建、模型架构及Prompt工程等核心技术。CLIP利用Transformer架构和精心设计的Prompt模板,在Zero-Shot分类、图像检索等场景展现出强大能力,为多模态AI应用开辟新方向。

weixin_27027459的博客 372

网络编程1

[b] -网络编程概述 网络模型:1、OSI(Open System Interconnection 开放系统互连)参考模型 2、TCP/IP 参考模型 网络通信要素: 1、IP地址 2、端口号 3、传输协议 -网络参考模型 OSI参考模型:应用层,表示层、会话层、传输层、网络层、数据链路层、物理层(分7层) TCP/IP参考模型:应用层、传输层、网际层、主机至...

huangcaiyan 160

手把手教你用内核远程call实现64位进程注入(附完整ShellCode示例)

本文深入探讨了在Windows 64位环境下,通过内核态直接操作线程TrapFrame结构实现进程注入的高级技术。文章提供了从驱动框架设计、用户态-内核态通信,到定位修改TrapFrame、编写Shellcode及执行环境恢复的完整实战指南,并附有详细的代码示例,为安全研究人员和开发者提供了绕过用户态检测、实现底层远程代码执行的新思路。

weixin_28396629的博客 345

Python9-网络编程2-day31

基于UDP协议的socket #server import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',8080)) msg,addr = sk.recvfrom(1024) print(msg.decode('utf-8')) sk.sendto(b'bye',addr) sk....

weixin_30847939的博客 82

Flatten 层的深度理解与运用

Flatten 层的深度理解与运用

你要拥有一个你喜欢并且热爱的人生 7030

Unity必学:Protobuf-net预编译实战

本文深入解析Unity项目使用Protobuf-net Precompile的必要性。作为高效跨平台序列化方案,Protobuf-net解决了Unity工程在网络同步、存档系统中的性能瓶颈,特别是针对iOS等AOT平台的兼容问题。通过预编译模式,将运行时反射转为静态代码生成,显著提升移动端性能表现,支持协议平滑升级,已成为大厂项目的标配方案。文章从原理、实践到多平台适配,全面展示了这一"序列化发动机"如何支撑现代Unity项目的数据传输需求。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 495

黑马程序员——网络编程(一)

------- http://www.itheima.com" target="blank">android培训、http://www.itheima.com" target="blank">java培训、期待与您交流! ---------- -网络编程概述 网络模型:1、OSI(Open System Interconnection 开放系统互连)参考模型

kolen001的专栏 457

【Unity动画优化插件】BT - OptiAnimX —— AAA级动画优化框架深度剖析

BT - OptiAnimX 是一款面向 Unity 的高性能动画优化框架,核心目标是解决多角色动画场景中的性能瓶颈问题。该插件对标《战争机器5》和《巫师3》等 AAA 游戏中的动画优化技术,通过一整套自动化与智能化的优化策略,将动画性能提升与视觉质量控制结合在一起。它适用于从移动端、VR 到高端 PC 的多平台项目,尤其在“多人角色 + 高频动画”的场景中表现突出,例如 MMO、开放世界、动作游戏等。BT - OptiAnimX 本质上是一套“动画性能调度系统”,而不仅仅是优化工具。

2403_88403568的博客 433

Java实现网络编程

一、网络通信要完成两个要求 1.如果准确找到对方 通过IP地址和端口号来定位到唯一的一台计算机和对应程序 2.如果实现高效的数据传输 传输数据要遵循规则: 1)OSI参考模型 2)TCP/IP参考模型 OSI参考模型过于理想化,TCP/IP协议简化了OSI的应用、表示、会话层为应用层,因此成为了当前主流的网络传输参考模型。 二、Java实现互联网通信 要实现Java程序与互

涅磐 434

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

网络编程day6

printf("*********学生信息管理系统************\n");printf("*********1.添加学生信息************\n");printf("*********2.删除学生信息************\n");printf("*********3.修改学生信息************\n");printf("*********4.查看学生信息************\n");void upd(sqlite3 *ppDb ){ //修改学生信息。

HenryHot的博客 272

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[Java视频笔记]day23

网络编程   网络模型:OSI参考模型,TCP/IP参考模型 网络通讯要素:IP地址,端口号,传输协议 IP地址(对应对象 InetAddress)          网络中设备的标识          不易记忆,可用主机名          本地回环地址:127.0.0.1主机名:localhost import java.net.*; class day23 {

逆风的方向 更适合飞翔 3677

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

网络编程总结

网编摘要

Goose_House的博客 404

实训笔记day4

2.将容器装包 DatagramPacket dp=new DatagramPacket(容器名称,容器长度);1.创建爱套接字,但是要添加端口 DatagramSocket ds=new DatagramSocket(端口号)1.创建套接字 DategramSocket ds=new DatagramSocket();3.在测试类中创建方法调用接口对象(接口本身没有对象,只能调用接口的实现类的对象)dp.getLenght()从包中获得收到的信息的长度。信息的字节数组的长度,信息发送的目的地主机,

GG531r的博客 49

大一暑假实习day3——容器和tcp

string和tcp、upd开头

keepstrivingchy的博客 601

Day23 Java学习笔记之《网络基础&UDP&TCP&NIO》

文章目录1. 网络编程入门1.1 网络编程概述【理解】1.2 网络编程三要素【理解】1.3 IP地址【理解】1.4 InetAddress【应用】1.5 端口和协议【理解】2. UDP通信程序2.1 UDP发送数据【应用】2.2 UDP接收数据【应用】2.3 UDP通信程序练习【应用】2.4 UDP三种通讯方式【理解】2.5 UDP组播实现【理解】2.6 UDP广播实现【理解】3. TCP通信程序3.1 TCP发送数据【应用】3.2 TCP接收数据【应用】3.3 TCP程序练习【应用】3.4 TCP程序文件

weixin_46146855的博客 625

实训day05---09.07

2.将容器装包 DatagramPacket dp=new DatagramPacket(容器名称,容器长度);1.创建爱套接字,但是要添加端口 DatagramSocket ds=new DatagramSocket(端口号)3.在测试类中创建方法调用接口对象(接口本身没有对象,只能调用接口的实现类的对象)1.lambda表达式 arr.filter(e=>{console.log(e);dp.getLenght()从包中获得收到的信息的长度。useEatable(Eatable的实现类对象);

weixin_62013845的博客 60

day3网络编程-2017-11-13 HTTP协议

day3网络编程-2017-11-13 /***************************************************/ 更改聊天upd程序 退出关闭自己 A对方走,自己也退出 B更新聊天 和对方端口的端口 /********************************************************/ /*******HTTP协议**********...

开开的博客 476

2024/4/18 网络编程day6

【代码】2024/4/18 网络编程day6。

m0_67764503的博客 171

18天掌握Java SE jvav梳理总结 从jvav到架构师

相关链接: 自学Java day6 解决8皇后问题 从jvav到架构师_思维剪刀差的博客-优快云博客 自学Java day8 项目-零钱通 从jvav到架构师_思维剪刀差的博客-优快云博客_jvav 自学Java day12 使用jvav实现链表 从jvav到架构师_思维剪刀差的博客-优快云博客_jvav 自学Java day17 jvav网络编程 从jvav到架构师_思维剪刀差的博客-优快云博客 自学Java day18 jvav反射专题 从jvav到架构师_思维剪刀差的博客-优快云.

qq_68286846的博客 857

day8 socket

代码: 例子1:socket tcp 通讯 server端 import socketserver = socket.socket()ip_port = ("127.0.0.1",8001)server.bind(ip_port)server.listen()conn,addr = server.accept()print(conn)print(addr)from_client...

andy_5555的博客 118
上一篇: 网络编程 day1 练习
下一篇: 网络编程 day4
风铃响了
博客等级 码龄4年 76粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值