关于Winsock:Winsock编程注意事项:共享套接字

VB6 Winsock网络编程项目实战 本文还有配套的精品资源,点击获取 简介:VB6是一个经典的Windows应用程序开发环境,Winsock是用于实现TCP/IP通信的网络接口。本文档展示了如何在VB6中使用Winsock控件创建基础的网络聊天应用和文件信息交换程序。通过server和client示例文件,读者可以学习到Winsock控件的关键使用方法、网络连接建立、数据传输、事件驱动编程、以及多线程处理等重... 阅读详情

引入了WSADuplicateSocket函数以启用跨进程的套接字共享。 源进程调用WSADuplicateSocket以获取目标进程标识符的特殊WSAPROTOCOL_INFO结构。 它使用一些进程间通信(IPC)机制将此结构的内容传递给目标进程。 然后,目标进程在调用WSPSocket时使用WSAPROTOCOL_INFO结构。 此函数返回的套接字描述符将是底层套接字的附加套接字描述符,从而变为共享。 套接字可以在给定进程中的线程之间共享,而不使用WSADuplicateSocket函数,因为套接字描述符在进程的所有线程中都有效。

就I / O而言,引用共享套接字的两个(或更多)描述符可以独立使用。 但是,Winsock接口不实现任何类型的访问控制,因此进程必须协调共享套接字上的任何操作。 共享套接字的典型示例是使用一个进程来创建套接字和建立连接。 然后,此过程将套接字移交给负责信息交换的其他进程。

WSADuplicateSocket函数创建套接字描述符而不是底层套接字。 结果,与套接字相关联的所有状态在所有描述符中保持共同。 例如,随后使用来自任何或所有描述符的getsockopt可以看到使用一个描述符执行的setsockopt操作。 进程可以在重复的套接字上调用closesocket,并且描述符将被取消分配。 但是,底层套接字保持打开状态,直到使用最后一个剩余描述符调用closesocket。

共享套接字上的通知受WSAAsyncSelect和WSAEventSelect函数的通常约束。 使用任何共享描述符发出这些调用中的任何一个都会取消套接字的任何先前事件注册,无论使用哪个描述符进行该注册。 因此,例如,不可能使进程A接收FD_READ事件并且进程B接收FD_WRITE事件。 对于需要这种紧密协调的情况,建议开发人员使用线程而不是单独的进程。

深入理解Winsock 2 API与多线程编程 本文深入探讨了Winsock 2 API在网络编程中的应用,以及如何利用多线程技术提高程序效率。首先介绍了Winsock 2 API中的套接字函数、异步函数、数据库查找函数以及与TCP/UDP套接字的关系。接着,文章详细阐述了多线程编程的相关概念,包括线程的创建、同步机制、优先级调整以及线程间的通信。此外,还涉及了如何在多媒体应用中实现声音的播放与录制,以及在图形用户界面中处理多线程数据更新。 阅读详情

相关推荐

winsock套接字

winsock套接字

关于WSADuplicateSocket的理解~(整理)

WSADuplicateSocket这个函数网上有少部分人问它的用法,其实它就是 Copy int WSADuplicateSocket( __in   SOCKET s, __in   DWORD dwProcessId, __out

绝迹·危言的专栏 6531

什么是Claude 的 Agent Skills?

摘要: Claude的Agent Skills功能支持通过结构化技能包(含指令、脚本、工具)实现任务自动化,如数据分析、文档生成等。核心能力包括:1)技能包管理(如Python脚本+模板);2)工具调用(API/数据库交互);3)子代理协作(拆分复杂任务)。快速上手步骤:创建技能包(如Excel报表生成)、配置工具权限、触发执行;支持多代理并行处理(如SQL查询+可视化)。关键技巧:工具需明确定义参数、利用子代理共享上下文、注重权限管控。官方文档与社区资源提供进阶指导,使Claude成为可编程的数字助手。

jobleap.cn求职助手首页 1729

进程间传递描述符

进程间传递描述符一 每个进程都拥有自己独立的进程空间,这使得描述符在进程之间的传递变得有点复杂,这个属于高级进程间通信的内容,下面就来说说。顺便把 Linux 和 Windows 平台都讲讲。 Linux 下的描述符传递 Linux 系统系下,子进程会自动继承父进程已打开的描述符,实际应用中,可能父进程需要向子进程传递“后打开的描述符”,或者子进程需要向父进程传递;或者两个进程可能是无关的,

juary_的专栏 1667

Windows 24H2升级后eNSP AR_40报错40?VirtualBox虚拟化修复指南

虚拟化技术通过Hypervisor在操作系统与硬件间建立抽象层,使虚拟机能够共享物理资源。其核心原理依赖CPU的VT-x/AMD-V指令集,而Windows 24H2对内核隔离与驱动签名的强化会直接占用或拦截这些虚拟化资源。在工程实践中,VirtualBox作为Type-2型Hypervisor,常因内存完整性开启或版本过旧导致虚拟网卡创建失败,进而引发设备启动中断。典型场景包括网络仿真实验、多系统测试环境搭建等。当eNSP的AR_40路由器依赖VirtualBox引擎时,24H2的安全策略变更便会触发错误

weixin_34375251的博客 216

TeraTerm 使用技巧

⏹TeraTerm 使用技巧

菜鸟记录 1万+

WSADuplicateSocket、WSASocket失败,错误码为WSAEINVAL(10022)

PS:最近又发现一种无法复用套接字的情况,修改一下。2011/10/11 16:24 一、失败的原因: 1、MS的解释     http://support.microsoft.com/kb/216603/en-us 2、目标进程和当前进程不在同一个se

lyclowlevel的专栏 5605

vCenter6.7证书过期导致503报错的全面修复指南:从STS证书更新到SSL信任修复

本文详细解析了VMware vCenter 6.7因STS证书过期导致503服务不可用错误的根本原因,并提供了从诊断、更新STS证书到修复SSL信任链的完整解决方案。通过命令行工具检查证书状态,使用官方脚本更新过期STS证书,并利用lsdoctor工具修复深层SSL信任问题,最终指导用户使用certificate-manager彻底重置所有证书,帮助管理员快速恢复vCenter服务。

pz890123的博客 1294

Windows网络编程笔记之一:winsock简介

1.winsock 的初始化 int WASStartup(WORD wVersionRequested, LPWSADATA lpWSADATA); wVersionRequested 高字节制定所需winsock库的次版本,低字节是主版本。可以使用宏MAKEWORD(x, y), x为高字节,y为低字节。 typdef strcut WSADATA { ...

weixin_30628077的博客 223

Ubuntu20.04下Intel AX201网卡驱动安装全攻略:从内核升级到固件更新

本文详细介绍了在Ubuntu 20.04系统上解决Intel AX201无线网卡驱动问题的完整方案。针对戴尔游匣G15等新硬件,通过升级内核至HWE版本、从官方仓库获取最新固件文件,并调整BIOS设置,彻底解决Wi-Fi无法识别或连接不稳定的问题,为开发者提供了一套从诊断到修复的实践指南。

gpt4scribbler的博客 690

33、密码学中的选择密文攻击与Cramer - Shoup加密方案

本文详细介绍了密码学中选择密文攻击的背景及其对Cramer-Shoup公钥加密方案的影响。该方案在决策Diffie-Hellman假设和抗碰撞哈希函数的基础上,能够有效抵御自适应选择密文攻击,并且其安全性无需依赖随机预言机模型。文章还分析了Cramer-Shoup方案的设计原理、加密与解密过程,以及其在标准假设下的安全性证明方法。此外,通过一系列相关练习,帮助读者进一步理解密码学概念如密文不可区分性、ElGamal加密、Goldwasser-Micali方案等。最后,文章展望了密码学的未来发展趋势,包括量子

vscode6remote的博客 100

第一章 Winsock简介

Winsock是一种标准的API(应用程序编程接口),主要用于网络中的数据通信,它允许两个或多个应用程序(或进程)在同一台机器上或通过网络相互通信。 1.1 Winsock头文件及库文件   WINSOCK2.H , WINSOCK.H , MSWSOCK.H(此头文件用于微软专用编程扩展,这些扩展常用于高效Winsock应用程序的开发)   在编译采用了WINSOCK2.H的应用程序时,须...

weixin_30522183的博客 191

DeepSeek+即梦:AI视频创作从0到1全突破

本文为 DeepSeek 与即梦生成视频全攻略,从前期注册登录、熟悉工具界面及硬件网络准备入手,助读者开启 AI 视频创作。详细阐述利用 DeepSeek 构思脚本、即梦实现画面生成与静态图转动态视频的方法,包括提示词编写、参数调整等技巧。同时介绍后期合成音画、添加字幕特效及多平台适配要点,结合实战案例解析全流程。还分享进阶提示词优化、版权注意等避坑指南,为创作者提供从 0 到 1 的 AI 视频创作完整解决方案。

邓邓子的博客 8111

C语言socket编程<一>socket之Winsock API

参考网址:https://blog.youkuaiyun.com/Datura_Metel/article/details/79900395 https://www.2cto.com/kf/201804/736240.html https://blog.youkuaiyun.com/m0_37947204/article/details/80489431 https://blog.youkuaiyun.com/j...

djj810625的博客 822

YOLOv8【第一章:基础入门篇·第1节】一文搞定,核心架构深度解析与环境配置!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 2104

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

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

Winsock 套接字的两种模式阻塞和非阻塞

<br />Windows 套接字在两种模式下执行I/O 操作:锁定和非锁定。 <br />在锁定模式下,在I/O 操作完成前,执行操作的Winsock函数 <br />比如send和recv)会一直等候下去,不会立即返回程序(将控 <br />制权交还给程序)。而在非锁定模式下,Winsock 函数无论如何 <br />都会立即返回。 <br /> <br />锁定模式 <br />对于处在锁定模式的套接字,我们必须多加留意,因为在一个锁 <br />定套接字上调用任何一个Winsock API 函数,都

haohuang_hd的专栏 2570

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

WinSock 的多线程编程

Winsock(Windows Sockets)是 Windows 操作系统中用于实现网络通信的一套 API(应用程序编程接口)。Winsock 提供了两种 I/O 模式:阻塞模式和非阻塞模式。在阻塞模式下,应用程序在发送或接收数据时是阻塞的,直到操作完成或超时。而在非阻塞模式下,应用程序可以同时执行其他任务,在发送或接收数据时不会被阻塞。Winsock 的多线程编程通常用于实现非阻塞模式,它允许应用程序在等待网络操作完成的同时执行其他任务,提高了应用程序的响应能力和效率。

JAZJD的博客 1731

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

关于Winsock:Winsock编程注意事项

Windows套接字2在许多方面扩展了Windows套接字1.1的功能。 下表总结了一些主要功能更改。 特性 描述 Windows Sockets 2 Architecture Windows Sockets 2体系结构的说明。 Socket handles 套接字句柄可以选择是Windows套接字2中的文件句柄。可以使用带有标准Windows文件I / O函数的套接字...

一世豁然的专栏 427

Windows上的C++网络编程保姆级教学

Windows上的C++网络编程保姆级教学

LorraineWen的博客 7749

Windows驱动_WSK驱动之三WSK编程注意事项

Winsock Kernel Programming Considerations                Sharing Transport Addresses                在大多数情况下,WSK应用不能绑定一个套接字到一个本地传输地址,这个传输地址已经被其它动态套接字使用了。WSK应用可以使用SO_EXCLUSIVEADDRUSE 和SO_REUSEADD

Z18_28_19的专栏 3075

Python Socket套接字编程

网络技术是从1990年代中期发展起来的新技术,它把互联网上分散的资源融为有机整体,实现资源的全面共享和有机协作,使人们能够透明地使用资源的整体能力并按需获取信息,资源包括高性能计算机、存储资源、数据资源、信息资源、知识资源、专家资源、大型数据库、网络、传感器等.网络编程是实现各类网络应用程序的基础,现在大部分的网络应用程序都基于Socket通信的,网络通信协议一共有两种,一种是基于OSI的7层参考模型,而另一种则是TCP/IP协议的4层。Socket(套接字)编程是一种用于在计算机网络中实现进程间通信的编程

微软技术分享 7369

Winsock 套接字模式

阻塞模式 在阻塞模式下,I/O操作完成之前,Winsock调用会一直等待,不会立即返回。 Winsock应用程序通常是遵照“生产者-消费者”模型,应用程序需要读取(或写入)指定数量的字节,然后以该数据为基础执行计算。 SOCKET sock; char buff [256]; int done = 0; … while (!done) { nBytes = recv(...

weixin_33912453的博客 356

winsock i/o方法

首先,Windows套接字在两种模式下执行I / O操作:锁定和非锁定。          在锁定模式下,在I / O操作完成前,执行操作的Wi nsock函数(比如send和recv)会一直等候下去,不会立即返回程序(将控制权交还给程序)。而在非锁定模式下, Wi nsock函数无论如何都会立即返回。 1 锁定模式        耗费或长或短的时间“等待”。       大多数Wi

cohenxiaomiao的专栏 1173

计算机网络网络应用之Socket编程应用-Socket API函数(WinSock为例)3

系列文章目录 第二章计算机网络网络应用之Socket编程应用-Socket API函数(WinSock为例) 第二章计算机网络网络应用之Socket编程应用-Socket API函数(WinSock为例)系列文章目录三、Socket编程-Socket API函数(WinSock为例)3.1WSAStartup函数3.2WSACLeanup函数3.3socket函数3.4Socket面向TCP/IP的服务类型3.5Closesocket函数3.6bind函数 三、Socket编程-Socket API函

Redhat_yan 871

winsock协议错误编码解析

Windows协议可以应用到很多通用环境。例如,要检查网络,可以使用Windows套接字(WinSock)脚本来查看缓冲区发送和接收到的实际数据。WinSock类型还可以用于录制其他低级通信会话。通过他可以录制回放Vuser类型不支持的应用协议。使用VuGen,您可以录制应用程序对Winsock.dll或Wsock32.dll的API调用,但是这种协议的错误提示代表是什么呢!其实每次winsock

Rob_1983的专栏 2082
上一篇: 关于Winsock:Winsock编程注意事项:特定于提供者的扩展机制
下一篇: 关于Winsock:Winsock编程注意事项:连接设置和拆解
一世豁然
博客等级 码龄15年 1276粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值