java即时通信解决方案openfire+spark完整安装指南_elimago的博客-CSDN博客


本站和网页 https://blog.csdn.net/elimago/article/details/4502181 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

java即时通信解决方案openfire+spark完整安装指南_elimago的博客-CSDN博客
java即时通信解决方案openfire+spark完整安装指南
elimago
于 2009-08-31 10:52:00 发布
4330
收藏
分类专栏:
opensource
文章标签:
java
smack
sqlserver
数据库
测试
服务器
opensource
专栏收录该内容
48 篇文章
0 订阅
订阅专栏
本 文介绍基于java的即时通信解决方案openfire3.6.4+spark2.5.8的完整的安装说明,并介绍了使用smack的java类库如何与 im用户交互的例子,这样使得业务系统的消息可以通过smack编程将消息发送给spark客户端。spark2.5.8除了聊天之外还支持多人视频,语 音,文件传输,截图,观看远程桌面,msn互联互通等功能。因
本文图片太多,需要看图片的请下载资源或者访问http://code.google.com/p/openjweb/downloads/list ,找到java_im开头的文件下载。  
Openfire+Spark 安装手册
王保政
QQ:29803446
Msn:baozhengw999@hotmail.com
关键字 : 快速开发平台 openjweb 增删改查 即时通信
2009-8-29
目 录
第一章        Java 领域的 IM 解决方案 .... 2
第二章 安装 openfire3.6.4. 3
2.1 配置机器的域名 ... 3
2.2 安装 openfire. 3
2.2.1 安装 ... 3
2.2.2 运行数据库脚本 ... 4
2.2.3 数据库驱动 jar 包 ... 6
2.2.4 openfire 初始化配置 ... 6
2.3 设置用户 ... 12
第三章     安装 spark 客户端 .... 13
第四章     配置 msn 网关 .... 15
4.1 服务端配置 msn 网关 ... 15
第五章        Red5 视频配置 .... 18
5.1 部署 red5.war. 18
5.2 spark 客户端配置视频插件 ... 19
第六章     使用 smack 开发即时通信功能 .... 22
第一章        Java 领域的 IM 解决方案
Java 领域的即时通信的解决方案可以考虑 openfire+spark+smack 。当然也有其他的选择。
Openfire 是基于 Jabber 协议 (XMPP) 实现的即时通信服务器端版本,目前建议使用 3.6.4 版本,这个版本是当前最新的版本,而且网上可以找到下载的源代码。
即时通信客户端可使用 spark2.5.8, 这个版本是目前最新的 release 版本,经过测试发现上一版本在视频支持 ,msn 网关支持上可能有问题,所以选择 openfire3.6.4+spark2.5.8 是最合适的选择。
Smack 是即时通信客户端编程库,目前我已测通通过 jsp 使用 smack 的 API 向 openfire 注册用户发送消息,并且可以通过监听器获得此用户的应答消息。
通过 smack 向 msn 用户和 QQ 用户 ,gtalk 用户发送消息应该也可以实现,关于向 gtalk 用户发送消息的例子较多。这个留待以后研究。至少目前可以通过程序向 spark 发消息了。对于局域网内部应用足以解决系统与用户交互的问题,甚至可以做自动应答机器人。
Spark 支持聊天,语音,视频,会议,文件收发,截屏,连接 msn 等功能。
第二章 安装 openfire3.6.4
2.1 配置机器的域名
使用 openfire 需要配置机器的域名。如果局域网内没有安装域服务器,则需要手工为机器配置域名,打开 C:/WINDOWS/system32/drivers/etc/hosts 文件,增加一新行:
127.0.0.1                          bzwang.tzsoft.com  (用户根据自己的需要可配置称别的名字,但最好符合带 . 的域名格式)
其他机器使用域名访问 openfire, 也需要在 C:/WINDOWS/system32/drivers/etc/hosts 中指定 bzwang.tzsoft.com 对应的 ip 地址,假设安装 openfire 的主机 IP 为 192.168.1.10, 则 hosts 文件中应增加一新行 :
192.168.1.10 bzwang.tzsoft.com
通过这种方式指定主机域名,建议安装 openfire 的机器配置静态 ip 地址以免 ip 发生改变。
2.2 安装 openfire
2.2.1 安装
安装程序为 openfire_3_6_4.exe, 运行后,语言选择简体中文,见下图:
后续按照提示安装,最后出现下面的界面:
这时先不要运行 openfire, 所以不要勾选上面页面的复选框,然后点完成,如果勾选的话,在新出现的窗口中点“ stop ”停止 openfire 后续的运行,然会点 ”quit” 退出,因为下面要配置 openfire 使用的数据库,需要手工将数据库驱动放到 openfire 的某个目录下,否则 openfire 不识别数据库驱动的包名。
2.2.2 运行数据库脚本
数据库运行脚本在 C:/Program Files/Openfire/resources/database 目录下,如果用户安装选择的不是 C:/Program Files 目录,可以到安装 openfire 目录下找到 database 目录,打开此目录后可看到有多种版本的数据库脚本,假定我们现在要把 openfire 的数据库安装在 sqlserver2005 中,则使用 openfire_sqlserver.sql 脚本,假如已经装好了 2005 数据库,可在 Management Studio 中执行数据库脚本,见下图:
执行后,打开数据库,可看到下面创建的数据库表:
2.2.3 数据库驱动 jar 包
如果使用 sqlserver2005, 则将 sqlserver2005 驱动 jar 包 sqljdbc.jar 复制到 C:/Program Files/Openfire/lib 下,使用 openjweb 快速开发平台的用户可直接从 D:/project/apache-tomcat-5.5.27/common/lib 找到此 jar 包复制过去,另外此目录还有 mysql 的 mysql-connector-java-3.1.12-bin.jar 和 oracle 的 ojdbc14.jar ,如果用户不选择 sqlserver 则复制对应数据库的驱动 jar 包。
2.2.4 openfire 初始化配置
从开始菜单中找到 openfire 并运行,下面是运行界面:
点 ”Launch Admin”, 出现下面的页面,页面连接为 http://127.0.0.1:9090/setup/index.jsp
语种选择中文(简体),点 ”Continue”: (下面的页面如果出现英文,请刷新一下页面或者重新点 Launch Admin )
这个页面的 Domain 默认为机器名,请改为一开始设置的域名,例如 bzwang.tzsoft.com, 就是将图中的 Domain 中的文字换成 bzwang.tzsoft.com 后,点 Continue( 继续 ):
这个页面中第一个选项,即标准数据库连接,不要选择嵌入的数据库 (Embedded Database, 嵌入的数据库是 hsqldb 数据库,生产环境不要选择此选项 ), 然后点 ” 继续 ”:
这个页面是配置是否使用 LDAP, 我们现在不配置 LDAP, 所以选择 Default 默认即可,点继续 :
上图是 sqlserver2005 的配置, jdbc 驱动类为 : com.microsoft.sqlserver.jdbc.SQLServerDriver
数据库 URL 为:
jdbc:sqlserver://192.168.1.222:2324;DatabaseName=dms
数据库名和用户名及口令请根据实际环境配置。
配置完成后,点 ” 继续 ”:
如果点继续出现错误提示页面,请检查
(1)        数据库表是否按前面的步骤已在数据库中创建
(2)        是否已将对应的数据库 jar 保复制到 openfire 的 lib 目录
(3)        检查数据库连接参数,端口,数据库名等属性,可使用 dos 命令行检查数据库端口是否有效,例如 telnet 192.168.1.222 2324
下面是配置 LDAP 的页面,选择 ” 初始设置 ”( 默认选项 ) 即可。
点“继续”:
下面是配置超级管理员的页面:
输入一个邮箱和口令,例如 123456
设置好后点“继续”:
这个时候不要点“登录到管理控制台” , 登录肯定失败,需要切换到这个页面:
点 ”stop” ,然后点“ start ” , 等重启动成功后点 ”Launch Admin”, 进入登录页面:
使用 admin 用户名和设置的口令 123456 登录,下面是登录成功的页面,恭喜! sqlserver2005 上安装 openfire 成功!
我们打开 ofUser 数据库表可以看到 admin 用户信息: ( 下面的口令不是用 md5 加密的 )
2.3 设置用户
在登录成功页面点“用户 / 组”标签维护用户信息,可在这里增加新的用户,也可以建组,下面是新建的几个组:
下面新建几个测试用户,分别是 abao/abao,zhangyu/zhangyu,suqi/suqi,liu/liu
说明:当安装了 spark 客户端后,用户可直接在客户端注册帐号。
第三章    安装 spark 客户端
安装程序为 spark_2_5_8.exe ,安装过程全部默认即可。
下面是登录界面:
登录时可使用 openfire 中创建的帐号,也可以点 (A) 帐户自己注册新的帐号,服务器需设置为 openfire 的域名地址即上面安装的 bzwang.tzsoft.com, 下面是登录成功界面:
关于 spark 客户端的具体功能就不介绍了,下面介绍 openfire 配置 msn 网关及 spark 如何连接 msn ,以及 red5 视频的配置方式。
第四章    配置 msn 网关
4.1 服务端配置 msn 网关
将 gateway.jar 插件包 ( 可网上下载 ) 复制到 openfire 的 plugin 目录下,如 :
C:/Program Files/Openfire/plugins ,如果 openfire 安装到别的目录请找到对应的目录,把 gateway.jar 复制过去。停止 openfire, 重新启动并登录后,见下面的页面,多出了一个 gateways 的标签页:
点 Gateways, 找到 MSN Messagers, 勾选,然后点“选项”,见下图:
以上默认的配置不用修改,点“测试”,显示:
点“测试连接”,显示测试成功。(右侧将显示绿色背景的文字提示测试成功)
4.2 spark 客户端设置 msn 帐号:
启动 spark, 登录后 ,spark 窗口的右上多出一个灰色的蝴蝶,见下图:
点这个蝴蝶,然后选择“输入登入资讯”,显示下面的窗口:
在这里输入 msn 的用户和口令,然后保存,稍后片刻, spark 将从 msn 上获取用户列表,最后显示下面的 msn 好友列表:
这时可以选择一个在线用户聊天了, spark 还支持文件传输,截屏,语音,视频等。
第五章    Red5 视频配置
5.1 部署 red5.war
将 red5.war 复制到 C:/Program Files/Openfire/plugins ,如果 openfire 是在运行状态,一会会在这个目录下自动部署 red5.war( 在此目录下自动生成 red5 目录 ) 。安装成功后, openfire 的管理页面会多出一个 red5 标签,见下图:
服务端不需要做任何改动。
5.2 spark 客户端配置视频插件
上一步骤部署了 red5 后,需要停止 openfire 并重新启动,启动完成后,访问 http://bzwang.tzsoft.com:7070/red5 ,显示一个 red5 的 html 首页,下拉到页面最下面,找到 spark plugin, 点 ”here”, 见下图:
点 ”here ” 会下载 red5-plugin.jar, 直接保存在 C:/Program Files/Spark/plugins 目录下,重新启动 spark 。
在 spark 中右键点一个人,会出现几个菜单:
其中 View Destop Screen 和 Publish Desktop Screen 是相关联的 , 见下图:
如果 A 用户用 Publish Desktop Screen 发布了自己的桌面, B 用户选择 A 用户,右键选择上一个图中的 View Desktop Screen, 则 B 用户可看到 A 用户的计算机桌面。在 http://bzwang.tzsoft.com:7070/red5 页面上有一个功能和这个类似,见下图:
To publish 是发布自己的桌面, To Viewer 是别人观看自己发布的桌面,多人发布是什么效果没有具体测试。可以自己发布然后观看自己的桌面(效果有点像两个镜子对照,会出现层层窗口嵌套的现象),下面是自己发布自己的桌面并观看自己的桌面的效果:
当选择一个人,右键选择 Add/Remove Video Roster 后,可进行 视频聊天,可以加多个人进行视频,每选择一个热人,然后点 Add/Remove Video Roster ,就可以将这个人加入到视频中或者从视频中移除,下面是视频页面(我没装摄像头),可以看出一个页面中可以显示多人视频,如果其他人也装了 spark, 估计也能看到多人视频的效果 ( 猜测,没有测试 ) ,见下图:
第六章    使用 smack 开发即时通信功能
可以使用 smack 开源产品开发与即时通信用户交互的功能,这样我们可以使用系统来模拟一个 openfire 的用户来向其他用户发送消息,因而可以使应用系统产生的业务消息实时传递给即时通信用户,例如系统向某用户发送“有新的请假单需要您审批”,如果用户开启了 spark 客户端,则 spark 客户端会实时接收此消息。
Smack 可从网上下载,目前最新版本为 smack_3_1_0.zip ,将此文件里四个 smack 开头的 jar 包放到自己的 WEB 应用的 WEB-INF/lib 目录,使用下面的 jsp 文件进行测试 :
下面是测试向 spark 用户 suqi 发送消息的页面代码:
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="org.jivesoftware.smack.*"%>
<%@ page import="org.jivesoftware.smack.packet.*"%>
<%
   // 以下可以通过程序向 spark 帐号发信息,但没有测通想 msn 帐号发信息
   XMPPConnection connection = new XMPPConnection("bzwang.tzsoft.com"); //openfire 服务器的主机域名
   // ConnectionConfiguration connectionConfig = new ConnectionConfiguration( "messenger.hotmail.com",1863,"messenger.hotmail.com");
   //  XMPPConnection connection = new XMPPConnection(connectionConfig);
   connection.connect();// 先连接服务器
   try
   {
       connection.login("abao", "abao");// 使用 openfire 的注册用户登录 openfire 服务器
       System.out.println(" 登录成功 !");
       //createChat 的第一个参数一定要带域名 (suqi@bzwang.tzsoft.com) ,否则会话失败
       Chat chat = connection.getChatManager().createChat("suqi@bzwang.tzsoft.com", new MessageListener()
       //Chat chat = connection.getChatManager().createChat("baozhengw9999%hotmail.com@msn.bzwang.cmissoft.com", new MessageListener()
       {
           public void processMessage(Chat chat, Message message)
          {
              // 如果不用 connection.disconnect() 断开连接,这里可以监听回复信息
              System.out.println("Received message: " + message.getBody());
           }
        }
       );
      
       System.out.println(" 发送消息 ....");
      
       chat.sendMessage(" 请问你收到我的消息了吗 ?");//
       /* Message message = new Message("baozhengw9999%hotmail.com@msn.bzwang.cmissoft.com");
          message.setBody(" 你好!我是个聊天机器人! ");
          connection.sendPacket(message);
        */
        System.out.println(" 发送完毕 ...");
       connection.disconnect();
       } catch (Exception ex) {
           System.out.println("login error");
       }
%>
发送成功后,如果suqi 用户打开了spark, 则spark 会闪烁提示有新消息,打开spark, 聊天窗口显示系统用abao 用户发送的消息,见下图:
这样实现了业务系统和即时通信的无缝整合,以后应该还可以实现通过smack 编程使内网的openfire 注册用户向自己的msn 好友或QQ 好友发送消息以及接收消息。
elimago
关注
关注
点赞
收藏
评论
java即时通信解决方案openfire+spark完整安装指南
本文介绍基于java的即时通信解决方案openfire3.6.4+spark2.5.8的完整的安装说明,并介绍了使用smack的java类库如何与im用户交互的例子,这样使得业务系统的消息可以通过smack编程将消息发送给spark客户端。spark2.5.8除了聊天之外还支持多人视频,语音,文件传输,截图,观看远程桌面,msn互联互通等功能。因本文图片太多,需要看图片的请
复制链接
扫一扫
专栏目录
openfire Java客户端开发文档详解
10-16
openfire Java客户端开发文档详解
openfire+spark+安卓的聊天解决方案
12-09
使用openfire作为IM服务器,spark作为pc端,本实例作为安卓客户端进行聊天交流,注意本代码是安卓端,其他组件可以上相关网站下载,按照步骤搭建好环境之后,使用本代码的apk安装在安卓上,可以通过本客户端与spark好友聊天,通过本代码,你可以学习如何使用smack库的api接口
参与评论
您还未登录,请先
登录
后发表或查看评论
Openfire+Spark安装教程
king的专栏
08-28
5834
1. 下载OpenFire和Spark,注意Spark下载第一个带JRE的,Spark2.8.3默认使用32位的Jre环境,如果你已经安装了64位的jdk会安装不了。
下载地址:http://igniterealtime.org/downloads/index.jsp
2. Openfire需要配合数据库使用,我这里选择了MySQL,下载安装MySQL 5.7,因为Openfi...
openfire java_C#连接基于Java开发IM——Openfire
weixin_29009401的博客
02-20
219
Openfire简介Openfire 是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。Openfire的效率很高,单台服务器可支持上万并发用户。Server和Client端的通信都用xml文档的形式进行通信。但是Openfire是Java语言写的,对于C#的dll拓展库相比与java的jar包少的可怜,在网上寻找一番之后找到了一个比较好的dll拓展库,ag...
Java连接open fire_连接到本地openfire服务器android
weixin_39943678的博客
02-16
97
试试这个连接:public static boolean XMPPConnect() {try {System.setProperty("java.net.preferIPv6Addresses", "false");//SmackConfiguration.setPacketReplyTimeout(30000);config = new ConnectionConfiguration(Cons...
一步一步学习openfire+spark(1)
热门推荐
李守宏
12-31
1万+
以前写过一篇关于openfire的文章,内容比较孤立,写的也比较简单。没有实际意义。正好公司使用的是这个平台,现在从新开始,对openfire这个框架进行系统性的学习。深入的了解openfire以及和openfire配套的spark的开发。研究意义:这个词是写论文的时候学的,当时不太明白为什么会有这个东西,现在彻底的明白了。不说明研究意义,读者会看的一头雾水,一般是看不下去的。openfire是一
Java连接open fire_java – 为什么我不能连接到openfire服务器?
weixin_39928736的博客
02-16
94
我在使用Smack时尝试连接到Openfire(我已安装在我的计算机上)时遇到了一些麻烦.ConnectionConfiguration config = new ConnectionConfiguration("shin-pc" ,5222);config.setCompressionEnabled(true);config.setSASLAuthenticationEnabled(true);...
java+smack+openfire即时通讯Im(一)
qq_38400856的博客
04-02
644
java+smack+openfire即时通讯Im(一)简介openfire服务器搭建smack API文档以及相关jar包下载登录、注册初始化链接注册登录
简介
使用java+smack+openfire完成简单的即时通讯,包括登录、注册、添加好友、获取好友列表、获取离线信息等。
openfire服务器搭建
之前一篇文章已经写了服务器的搭建,以及一个简单的strophe.js连接openfire...
java smack_用smack+openfire做即时通讯
最新发布
weixin_42500454的博客
02-21
66
import java.util.Collection;import org.jivesoftware.smack.AbstractXMPPConnection;import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;import org.jivesoftware.smack.SmackException.NotConn...
基于openfire+smack的Android、Web、PC开发(一)
翰墨飘香的专栏
04-24
2126
yuanw
前言
Java领域的即时通信的解决方案可以考虑openfire+spark+smack。当然也有其他的选择。
Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用3.8.1版本,这个版本是当前最新的版本,而且网上可以找到下载的源代码。
即时通信客户端可使用spark2.6.3,这个版本是目前最新的release版本,经过测试
java即时通讯 开源_java开源即时通讯软件服务端openfire源码构建
weixin_39632698的博客
02-12
105
java开源即时通讯软件服务端openfire源码构建本文使用最新的openfire主干代码为例,讲解了如何搭建一个openfire开源开发环境,正在实现自己写java聊天软件:编译环境搭建调试环境搭建步骤列表下载openfire源码配置开发环境配置ant运行执行runconfigrations调试环境搭建完成下载openfire源码配置开发环境1.java版本 1.5及以上2.eclipse建议...
openfire和spark安装(遇到的问题点详解)
trywarrior的博客
01-25
600
本文记录openfire安装过程以及mysql安装过程,并对安装过程中遇到的问题一一进行了解决!
openfire+spark 在linux下安装,配置
没有用户名的博客
06-28
1721
openfire下载,spark下载,openfire配置,spark配置,openfire-4.1.4-1
Openfire 在linux下安装和配置 + spark 在windows下配置
本机环境
系统:CentOS 6.7 64 位JDK 1.7 64 位MySQL 5.6
Openfire 说明
官网:http://www.igniterealtime.org/projects/openfire/官网下
java Smack整合Openfire服务器实现IM即时通讯聊天功能
rongwenbin的专栏
09-11
2867
在文章开始,请你了解和熟悉openfire方面的相关知识,这样对你理解下面代码以及下面代码的用途有很好的了解。同时,你可能需要安装一个简单的CS聊天工具,来测试你的代码是否成功的在openfire服务器上建立会话链接,并成功的向在线用户发送聊天消息。
聊天软件Spark,用于测试聊天消息发送是否成功,下载地址:http://www.igniterealtime.org/downloads/dow
采用spark和openfire实现即时通讯系统
08-09
NULL
博文链接:https://m635674608.iteye.com/blog/2173068
openfire+spark+sparkweb的配置
09-03
openfire+spark+sparkweb的配置,中英文版的都有
openfire消息接收、处理流程图.JPG
09-17
openfire消息接收、处理流程图.JPG
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
elimago
CSDN认证博客专家
CSDN认证企业博客
码龄21年
暂无认证
18
原创
42万+
周排名
123万+
总排名
95万+
访问
等级
1万+
积分
101
粉丝
27
获赞
61
评论
104
收藏
私信
关注
热门文章
BAT批处理中的字符串处理详解
52480
vba数组写法
18496
Oracle分析函数:First_Value
15156
Struts2中的struts.i18n.encoding的较量
14607
Java 产品与软件下载
10291
分类专栏
adobe flex
24篇
ajax
31篇
css
3篇
db2
1篇
hibernate
3篇
iBatis
2篇
j2ee
11篇
j2se
126篇
java ide
2篇
javascript
38篇
java网络编程
8篇
opensource
48篇
oracle
48篇
project exp.
2篇
ria
2篇
security
7篇
spring
19篇
struts
5篇
struts2.0
8篇
test
9篇
thoughtworks
5篇
Translation
uml&xml
7篇
vba
2篇
version control
21篇
web server
9篇
web service
4篇
web开发
13篇
windows
6篇
动态语言
3篇
开发网站
3篇
数据库与sql设计
15篇
杂七八糟
23篇
架构设计
19篇
正则表达式
9篇
软件开发
37篇
最新评论
Java持久层选择Hiberante和iBATIS的时机
Deep Learning小舟:
懂了,谢谢分享!(^ ^)
5个常用Java 代码混淆器 助你保护你的代码
非著名架构师:
推荐一个免费的代码混淆方案https://blog.csdn.net/a1ccwt/article/details/107950716
Struts2中的struts.i18n.encoding的较量
黄豆科技:
强!大佬儿,收下我的膝盖...
EJB 3.0和Spring 2.5 :在Spring中使用EJB 3.0
qq_36730399:
POI EXCEL多表头的处理代码
liuhua19850506:
非常感谢
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
java并发编程不得不知道的几件事
优化变成了忧患:String类的split方法引起的内存泄漏
eclipse.ini内存设置
2010年12篇
2009年148篇
2008年258篇
2007年171篇
目录
目录
分类专栏
adobe flex
24篇
ajax
31篇
css
3篇
db2
1篇
hibernate
3篇
iBatis
2篇
j2ee
11篇
j2se
126篇
java ide
2篇
javascript
38篇
java网络编程
8篇
opensource
48篇
oracle
48篇
project exp.
2篇
ria
2篇
security
7篇
spring
19篇
struts
5篇
struts2.0
8篇
test
9篇
thoughtworks
5篇
Translation
uml&xml
7篇
vba
2篇
version control
21篇
web server
9篇
web service
4篇
web开发
13篇
windows
6篇
动态语言
3篇
开发网站
3篇
数据库与sql设计
15篇
杂七八糟
23篇
架构设计
19篇
正则表达式
9篇
软件开发
37篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值