使用Socket连接穿越CMWAP代理

使用Socket连接穿越CMWAP代理

作者:陈跃峰

出自:http://blog.youkuaiyun.com/mailbomb

                                          版权所有,未经允许严禁转载!

<o:p> </o:p>

       在J2ME网络程序开发过程中,为了节约用户支付的网络费用,很多J2ME手机网络程序都支持CMWAP代理。

       但是由于CMWAP只是中国移动建立的一个HTTP网络服务器,所以在使用HTTP网络编程中,可以很方便的使用。但是在使用socket方法操作时,这个方式好象就行不通了。

       下面就介绍一下如何使用socket连接来穿越CMWAP代理。其实由于CMWAP是一个标准的HTTP代理服务器,也就是说可以处理任何的基于HTTP协议的转发请求,那么就可以使用socket方式编程时使用HTTP协议即可了。

       实现原理:使用socket和CMWAP建立连接,然后将网络协议设计成HTTP协议的格式,这样CMWAP就可以继续实现请求的转发了,这就是实现的基本原理。

       当然,由于socket连接方式可以实现持续连接,这里的持续连接只存在于手机和CMWAP之间,但是可以只建立一次连接就实现多次的发送,还是基于请求-响应结构实现的,所以可以说实现了一部分socket的功能,而服务器端可以采用已有的HTTP服务器,从而降低开发成本和时间。

       该技术的优势主要有以下几点:

u       使用CMWAP进行数据传输,可以为用户节约流量费用。

u       由于手机和CMWAP之间建立的是持续连接,所以可以提高网络响应速度。

u       使用该方式,可以实现服务器端兼容HTTP连接和socket连接,也就是使用一组服务器,降低开发成本和减少开发时间。

       实现网络操作的代码如下所示:

package cmwaptest;

import java.io.*;

import javax.microedition.io.*;

/**

 * 测试使用socket连接穿越CMWAP服务器

 */

public class CmwapThread  extends Thread{

    CmwapForm cf;

    public CmwapThread(CmwapForm cf){

        this.cf = cf;

    }

<o:p> </o:p>

    public void run(){

        try{

                //测试

            cf.displayInfo("开始建立连接!");

            //使用代理连接

            SocketConnection sc = (SocketConnection)Connector.open("socket://10.0.0.172:80");

<o:p> </o:p>

            //测试

            cf.displayInfo("连接建立完毕!");

            //发送数据

            OutputStream os = sc.openOutputStream();

            String requestLine = "get http://www.freewebs.com/cqucyf/a.htm http/1.0\r\n";

            String header = "accept:*/*\r\n\r\n";

<o:p> </o:p>

            os.write(requestLine.getBytes());

            os.write(header.getBytes());

            os.flush();

<o:p> </o:p>

            //测试

            cf.displayInfo("数据发送完毕!");

<o:p> </o:p>

            //接收数据

            InputStream is = sc.openInputStream();

            byte[] data = new byte[10240];

            int num = is.read(data);

            //测试

            cf.displayInfo("数据接受完毕!" + "数据长度为:"+ num);

            //处理数据

            cf.doStr(data,num);

<o:p> </o:p>

            sc.close();

        }catch(Exception e){

            //e.printStackTrace();

            cf.doError(e.toString());

        }

    }

}<o:p></o:p>

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理 分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。 阅读详情

相关推荐

NAO V6 开发环境的配置(附所有文件)

NAO V6开发环境配置前言环境Robot SettingsChoregraphe 2.8.5.10python2.7+naoqi2.8+opencv4.1.0putty与FileZilla 前言 学校的机器人摸索了一段时间,之前摸爬滚打探索环境,之前没接触这类机器人可能会非常艰辛,希望能给需要的人一些帮助。Nao与pepper通用 环境 win10(x64)+naoqi2.8 1、Robot S...

wbhhello的博客 3221

易语言使用LhSocket5Net创建Socket5服务器

LhSocket5Net  是一款为开发人员用于在windows系统下假设Socket5服务器的支持库。 支持 Socket4,Socket4A,Socket5 协议传输,并提供对UDP代理的操作。 开发人员可指定本地服务器IP与端口进行架设,支持用户权限的校验,可对用用户链接数量速度等进行相关控制。 LhSocket5Net提供COM对象接口,可用于任意第三方开发平台进行集成开发,服务器的

qiutian11的专栏 4983

博图HMI多语言文本列表一键生成攻略:从Excel模板到TIA Portal的完整流程

本文详细介绍了如何利用Excel模板和TIA Portal API实现博图HMI多语言文本列表的一键生成。通过标准化Excel模板设计、解析TIA Portal的XML结构,并结合C#代码实现自动化导入,大幅提升多语言项目的开发效率。特别适用于需要支持多语言版本的自动化设备HMI界面开发。

weixin_26934905的博客 219

易语言Socket5客户端连接源码

.版本 2 .支持库 sock .支持库 iconv .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 .局部变量 客户端, 网络客户端 .局部变量 结果, 整数型 .局部变量 临时内容, 文本型 .局部变量 临时字节集, 字节集 ' 蓝恒网络易语言Socket5客户端连接演示 ' Http://www.lanheng.net ' 下面以来接代理访问土豆网为例 可直接使用IP地

qiutian11的专栏 1万+

人大金仓集群部署(主备)

4.2 上传安装包镜像和授权文件到install目录下并授权。1、复制系统脚本到/opt/kingbase目录下(主节点)4.2 修改cluster_install.sh。回车进行下一步,直到出现以下界面,回复Y键回车。三、安装kingbase客户端段(都要安装)install目录作为安装包具体存放目录。4.1 修改install.conf文件。2、复制授权文件到安装目录下(主节点)3、修改ssh参数(节点都要配置)5、安装kingbase客户端。二、基本环境配置(都要配置)6、数据库集群安装(主节点)

edutech_wang的博客 1997

SNN目标识别MNIST

总体来说这篇论文提出的方法用了多种更精密的细节,如LIF膜电位公式,三种STDP方法,但我觉得还可以有很大的改进,比如输入层全连接到兴奋层,兴奋层通过抑制层实现的侧向抑制,抑制层不参与学习等等。尤其是兴奋层通过抑制层实现侧向抑制这里,当神经元兴奋时,通过抑制层再倒回兴奋层,所抑制的已经经过一了一段时间的延迟。如有错误,请不吝赐教。

m0_74982304的博客 1264

使用Socket连接穿越CMWAP代理与完整的HTTP通信步骤7步

<br /><br />使用Socket连接穿越CMWAP代理<br />在J2ME网络程序开发过程中,为了节约用户支付的网络费用,很多J2ME手机网络程序都支持CMWAP代理。<br />       但是由于CMWAP只是中国移动建立的一个HTTP网络服务器,所以在使用HTTP网络编程中,可以很方便的使用。但是在使用socket方法操作时,这个方式好象就行不通了。<br />       下面就介绍一下如何使用socket连接来穿越CMWAP代理。其实由于CMWAP是一个标准的HTTP代理服务器,也就是

懒人的技术笔记 3757

Python程序—定子故障三相永磁同步电动机振动与电流数据集

1.0 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为2.26%: 匝间短路故障,严重度为2.70%: 匝间短路故障,严重度为3.35%: 匝间短路故障,严重度为4.41%: 匝间短路故障,严重度为6.48%: 匝间短路故障,严重度为12.17%: 匝间短路故障,严重度为21.69%1.5 kW 电机匝间短路故障数据: 正常匝间短路振动数据: 匝间短路故障,严重度为1.57%: 匝间短路故障,严重度为1.88%: 匝间短路故障,严重度为2.34%

m0_66465741的博客 1322

通过CMWAP进行SOCKET连接通信

Socket对大部分程序员来说应该不陌生,作为移动设备的开发者,对其应该更加了解。在手机上,上网的接入点大致分为CMWAP和CMNET两种,在CMNET接入点上建立socket通信应该和在电脑上一样,在这里我也就不多说,详情请参考:《GPRS开发系列文章之实战篇》(google一下就有,在这里感谢该作者)。 下面讲讲我在CMWAP接入点上建立Socket的经验吧,若有不对之处希望大家指

CodeLife 883

Allegro Design Entry HDL(OrCAD Capture HDL)原理图是设计快速入门图文教程

Allegro Design Entry HDL是Cadence公司开发的原理图设计工具,也可与Allegro PCB设计工具无缝对接,虽然板级开发中不如Design Entry CIS(又名 OrCAD Capture CIS)的使用那么广泛,但是由于Design Entry HDL支持芯片的开发,所以有不少公司尤其是芯片背景公司,选择使用Design Entry HDL进行原理图设计。两个原理图开发工具的使用方法大同小异,本文简单介绍使用Allegro Design Entry HDL开始一个新的设计,

fydar的博客 4134

SentEval学习笔记

SentEval allows you to evaluate your sentence embeddings as features for the followingdownstreamtasks: Task Type #train #test needs_train set_classifier MR movie review(影评) 11k 11k 1 1 CR product review(产品评述) ...

AlphaFinance 805

j2ee核心:用Socket连接穿越CMWAP代理

导读:   在J2ME网络程序开发过程中,为了节约用户支付的网络费用,很多J2ME手机网络程序都支持CMWAP代理。   但是由于CMWAP只是中国移动建立的一个HTTP网络服务器,所以在使用HTTP网络编程中,可以很方便的使用。但是在使用socket方法操作时,这个方式好象就行不通了。   下面就介绍一下如何使用socket连接来穿越CMWAP代理。其实由于CMWAP是一个标准的HTTP

yingfox的专栏 652

SIWAVE+ADS提取PCB走线寄生参数

本文将介绍一种很适合PCB走线提取寄生电感等参数的方法,即是通过SIWAVE将PCB走线的S参数提取出来,再通过ADS将S参数转换成电感、电容值。

sinat_15150363的博客 1766

cmwap 能否使用socket 网络讨论汇总

<br />1.cmwap相关:<br />cmwap是中国移动提供的浏览服务接入点,正常情况下,只开通HTTP 80端口,所以cmwap不支持socket通信(如果实在需要,需要向中国移动做业务申请,进行网关配置),因此一般的socket通信只能用cmnet(设立初衷针对无线上网)接入点。<br />2.移动网关的作用 <br />a)移动网关的主要作用是提高访问速度。因为客户请求的数据存于代理服务器的硬盘中,因此下次这个客户或其它客户再请求相同目的站点的数据时,就能直接从代理服务器的硬盘中读取,代理服务

keyken的专栏 1887

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

网络连接模块

<br />一直有一个疑问:CMWAP环境下是否可用Socket。以前没仔细去了解CMWAP,今天详细了解下:CMWAP是基于http协议的,所以用socket通信肯定是不行的。Http://10.0.0.172:80。从这可以看出,协议--http,端口--80,注意一个问题:协议是http,不是httpS。<br /> <br />在网上看到一篇文章:使用Socket连接穿越CMWAP代理(http://www.360doc.com/content/07/0309/16/3500_390662.shtm

1073

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

CMWAP和CMNET 的区别与适用范围

CMWAP和CMNET只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。  CMWAP是经过移动的内网代理上网的,所以手机上网经过CMWAP访问的时候,可以获取到手机的电话号码。CMWAP接入方式的限制很多,CMWAP接入方式只开放80,8080,9201端口,仅支持http和wap协议。也就是说,你的移动设备

武汉产品经理 1341

cmwap和cmnet的网速

1) 为什么会有两个接入点?  在国际上,通常只有一种GPRS接入方式(彩信之所以单独配置接入点是因为彩信服务需要设置专用的WAP网关,在这里不作探讨),为什么在中国会有CMWAP和CMNET两兄弟呢?  其实,CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。它们在实现方式上并没有

隼之 2092

在J2ME中使用Socket通过cmwap接入点访问安全HTTPS

转自:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=5495  这个问题是在我升级J2ME版XHTML浏览器的时候被引入的,我尝试了很多方法、发了很多帖子、问了很多人都没有找到可行的解决方案。最后我在PC上通用OTA连接方式使用WireShark拦截数据包才解决了问题,接下来我和大家分享一下解决问题的过程。所涉及的

samttsch的专栏 541

CMNET和CMWAP网络连接

<br />在j2medev上见到一篇关于CMNET和CMWAP网络连接。   现在我根据我的实际经验总结下它们。<br />1。CNNET,这个就不用怎么样介绍了,跟电脑上Internet没什么区别。<br />直接用这个这样的代码就Ok了 java 代码 try {               http = (HttpConnection) Connector.open(url);          } catch (IOException e) {                         e.

king船长的专栏 1152

转载 在J2ME中使用Socket通过cmwap接入点访问安全HTTPS

本文章由杨芹勍原创地址:http://www.cnblogs.com/felixYeou/archive/2009/03/30/1424750.html在J2ME中使用Socket通过cmwap接入点访问安全HTTPS这个问题是在我升级J2ME版XHTML浏览器的时候被引入的,我尝试了很多方法、发了很多帖子、问了很多人都没有找到可行的解决方案。最后我在PC上通用OTA连

zwtchy123的专栏 938

使用GPRS的cmwap接入点实现网络通讯1-----建立连接

使用GPRS的cmwap接入点实现网络通讯1-----建立连接 关于无线接入方式的比较请见http://www.cnblogs.com/yoyolion/archive/2007/05/26/760807.html cmwap作为费用低廉的无线上网方式,具有很大的应用价值。本文讨论了使用GPRS的cmwap接入点实现网络通讯,完成自定义数据的收发。环境与平台:服务器拥有一个公网ip,...

dbwwl0501的博客 167
上一篇: 如果搞一个免费的J2ME入门培训,你有兴趣参加吗?
下一篇: CLDC API和MIDP API源代码下载地址(包含各个版本)
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值