Unix和Windows跨系统通讯编程

多智能体强化学习论文——SEAC(NIPS 2020) 存在的问题&研究动机&研究思路 在稀疏奖励的环境下,多智能体的exploration存在效率不足等问题。 在IAC的基础上尝试加入重要性采样,使得每次更新智能体iii的参数时,不再仅仅使用智能体iii的数据,而是使用所有智能体的数据进行智能体iii数据的更新。 对于原始的IAC算法是on-policy的,而SEAC则是off-poligy的。 创新点 在每个智能体iii的actoriactor_iactori​和criticicritic_icritici​的更新过程中,都加入了重要性 阅读详情
Unix和Windows跨系统通讯编程
[文章信息]
作者:张勤 李华春
时间:2003-05-24
出处:天极论坛
责任编辑:方舟
[文章导读]
本文介绍了套接字(Socket)的基本概念及编程技术,并结合实例说明在Unix和Windows下如何用套接字实现客户/服务器方式的通讯编程......
硬件·72幅ATI壁纸巨献 饭A的节日
硬件·降价之年 为LCD显示器之崛起
数码·手中的美丽 摄影师最爱的单反
数码·积毁销骨 05年谁让iPod消亡
笔记本·04笔记本产业 铁打营盘流水兵
笔记本·征文投票正在进行 大奖等你拿
软件·[办公软件] 专题教程精选
软件·天极2004网络安全年度综述
游戏·魔兽争霸III 精美手工稿
游戏·04-05《圣斗士天界篇》月历
e时代·组图:明星比基尼挑战性感极限
e时代·组图:妓女电影另类排行榜
下载·2005年考研复习资料下载
下载·天极下载:邮件工具集合
Club·测试:你能当CEO吗?
Blog·数码相机的等效感光度
Blog·男性应知道的衬衫基本常识
Blog·我遇到的电脑白痴汇总
硬件·72幅ATI壁纸巨献 饭A的节日
硬件·降价之年 为LCD显示器之崛起
数码·手中的美丽 摄影师最爱的单反
数码·积毁销骨 05年谁让iPod消亡
笔记本·04笔记本产业 铁打营盘流水兵
笔记本·征文投票正在进行 大奖等你拿
软件·[办公软件] 专题教程精选
软件·天极2004网络安全年度综述
游戏·魔兽争霸III 精美手工稿
游戏·04-05《圣斗士天界篇》月历
e时代·组图:明星比基尼挑战性感极限
e时代·组图:妓女电影另类排行榜
下载·2005年考研复习资料下载
下载·天极下载:邮件工具集合
Club·测试:你能当CEO吗?
Blog·数码相机的等效感光度
Blog·男性应知道的衬衫基本常识
Blog·我遇到的电脑白痴汇总
advertisement
·1元搞定价值千元的数码,注册有大奖
·CN域名买一送一
·智能手机的颠峰
·iriver白色圣诞双重惊喜
·奥美嘉风暴来袭,豪礼连环送
·理光万元水晶疯狂送
·买HP台式机,中40G移动硬盘
·超清晰免费和MM亲密私语
·思科IP电话应用精彩动画演示
·免费试用灵信网站
热点推荐
· 11.15软件精选 制作MSI文件
· 闪客五周年之闪客光荣榜
· 用Winamp“品尝”无限音乐
· 网络加、解密的技术应用
· 闪客五周年之闪客光荣榜:zoron
[正文]

1 2  下一页

  摘 要 本文介绍了套接字(Socket)的基本概念及编程技术,并结合实例说明在Unix和Windows下如何用套接字实现客户/服务器方式的通讯编程。

  关键词 Berkeley Sockets Windows Sockets 通讯编程

  一、 前言

  随着Internet的不断发展,客户机/服务器模型得到了广泛的应用。客户应用程序向服务器程序请求服务。一个服务程序通常在一个众所周知的端口监听对服务的请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务的地址提出了连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务或对客户的请求作出适当的反应。   Unix最早是由美国贝尔实验室发明的一种多用户、多任务的通用操作系统,由于 Unix具有技术成熟、可靠性高、网络和数据库功能强、伸缩性突出和开发性好的特色,可满足各行各业的实际需要,特别是企业重要业务的需要,已经成为主要的工作平台和重要的企业操作平台,而微软公司的 Windows操作系统用户界面友好,安装、使用也比较方便,应用软件丰富,在个人PC机上成为主流操作系统。因此服务端使用 Unix,客户端使用 Windows能充分利用它们各自的优点,这也是今后发展的一个趋势。

  同时,金融行业的中间业务发展迅速,银行主机采用 Unix系统,而各代收代付单位多采用 Windows或 WindowsNT系统,在它们之间传输数据文件也涉及跨系统通讯的问题,通过套接字 Socket能方便地实现 Unix和 Windows的跨系统通讯,本文拟就这一问题作一探讨。

  二、 SOCKET简介

  TCP/IP是计算机互连最常使用的网络通讯协议, TCP/IP的核心部分由网络操作系统的内核实现,应用程序通过编程接口来访问 TCP/IP,见下图:

图1 应用程序与Windows Socket关系图

  七十年代中,美国国防部高研署(DARPA)将TCP/IP的软件提供给加利福尼亚大学Berkeley分校后,TCP/IP很快被集成到Unix中,同时出现了许多成熟的TCP/IP应用程序接口(API)。这个API称为Socket接口。今天,SOCKET接口是TCP/IP网络最为通用的API,也是在INTERNET上进行应用开发最为通用的API。

  九十年代初,由Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口,即Windows Sockets规范。它是Berkeley Sockets的重要扩充,主要是增加了一些异步函数,并增加了符合 Windows 消息驱动特性的网络事件异步选择机制。 Windows Sockets规范是一套开放的、支持多种协议的 Windows下的网络编程接口。目前,在实际应用中的Windows Sockets规范主要有1.1版和2.0版。两者的最重要区别是1.1版只支持TCP/IP协议,而2.0版可以支持多协议,2.0版有良好的向后兼容性,目前,Windows下的Internet软件都是基于 WinSock开发的。

  Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。在应用开发中就像使用文件句柄一样,可以对 Socket句柄进行读、写操作。我们将 Socket翻译为套接字,套接字分为以下三种类型:

  字节流套接字(Stream Socket) 是最常用的套接字类型,TCP/IP协议族中的 TCP 协议使用此类接口。字节流套接口提供面向连接的(建立虚电路)、无差错的、发送先后顺序一致的、无记录边界和非重复的网络信包传输。

  数据报套接字 (Datagram Socket) TCP/IP协议族中的UDP协议使用此类接口,它是无连接的服务,它以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重要的场合。数据报套接口的一个重要特点是它保留了记录边界。对于这一特点。数据报套接口采用了与现在许多包交换网络(例如以太网)非常类似的模型。

  原始数据报套接字(Raw Socket) 提供对网络下层通讯协议(如IP协议)的直接访问,它一般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。

  三、 基于SOCKET的应用开发

图2 面向连接协议的SOCKET编程模型

  面向连接协议的SOCKET编程模型应用最为广泛,因为面向连接协议提供了一系列的数据纠错功能,可以保证在网络上传输的数据及时、无误地到达对方。基于连接协议(字节流套接字)的服务是设计客户机/服务器应用程序时的标准,其编程模型如下:

  尽管Windows Sockets和Berkeley Sockets都是TCP/IP应用程序的编程接口,但二者由于分属不同的系统,在某些环节仍有一些差别。Windows Sockets API没有严格地坚持Berkeley传统风格,通常这么做是因为在Windows环境中实现的难度。

  1.套接口数据类型和错误数值

   Windows Sockets规范中定义了一个新的数据类型 SOCKET,这一类型的定义对于将来Windows Sockets规范的升级是必要的。这一类型的定义保证了应用程序向Win32 环境的可移植性。因为这一类型会自动地从16位升级到32位。

  在 UNIX中,所有句柄包括套接口句柄,都是非负的短整数。 Windows Sockets 句柄则没有这一限制,除了INVALID_SOCKET 不是一个有效的套接口外,套接口可以取从0到 INVALID_SOCKET-1 之间的任意值。因为 SOCKET 类型是unsigned ,所以编译已经存在于UNIX 环境中的应用程序的源代码可能会导致 signed/unsigned 数据类型不匹配的警告。

  因此,在socket() 例程和accept() 例程返回时,检查是否有错误发生就不应该再使用把返回值和-1比较的方法,或判断返回值是否为负(这两种方法在BSD 中都是很普通,很合法的途径)。取而代之的是,一个应用程序应该使用常量INVALID_SOCKET ,该常量已在WINSOCK.H 中定义。

  例如:
  BDS 风格
  m_hSocket=socket(…);
  if(m_hSocket=-1)   /*or m_hSocket<0*/
    {…}
  Windows风格:
  m_hSocket=socket(…);
  if(m_hSocket=INVALID_SOCKET)
    {…}

  2.select() 函数和FD_*宏

  由于一个套接口不再表示为非负的整数,select() 函数在Windows Sockets API中的实现有一些变化:每一组套接口仍然用 fd_set 类型来代表,但是它并不是一个位掩码。

  typedef struct fd_set{
   u_int fd_count;
   SOCKET fd_array;
  } fd_set;

  整个组的套接口是用了一个套接口的数组来实现的。为了避免潜在的危险,应用程序应该坚持用FD_XXX 宏(FD_SET,FD_ZERO,FD_CLR,FD_ISSET)来设置,初始化,清除和检查fd_set 结构。

  3.错误代码-errno,h_errno,WSAGetLastError()

   Windows Sockets 实现所设置的错误代码是无法通过 errno 变量得到的。另外对于 getXbyY() 这一类的函数,错误代码无法从h _errno 变量得到,错误代码可以使用 WSAGetLastError()调用得到,这种改进是为了适应多线程程序设计的需要。WSAGetLastError()允许程序员能够得到对应于每一线程的最近的错误代码。

  为了保持与 BSD 的兼容性,应用程序可以加入以下一行代码:

  #define errno WSAGetLastError()

  这就保证了用全程的 errno 变量所写的网络程序代码在单线程环境中可以正确使用。当然,这样做有许多明显的缺点:如果一个源程序对套接口和非套接口函数都用 errno 变量来检查错误,那么这种机制将无法工作。此外,一个应用程序不可能为 errno 赋一个新的值 (在Windows Sockets 中,WSAGetLastError()函数可以做到这一点)。

  例如:
  BSD风格:
  retcode=recv(…);
  if(retcode=-1 && errno=EWOULDBLOCK)
  {…}
  Windows风格:
  retcode=recv(…);
  if(retcode=-1 && WSAGetLastError ()=EWOULDBLOCK)
  {…}

  虽然为了兼容性原因,错误常量与4.3BSD 所提供的一致:应用程序应该尽可能地使用“WSA”系列错误代码定义。且常量 SOCKET_ERROR是被用来检查API 调用失败的。虽然对这一常量的使用并不是强制性的,但这是推荐的。例如,上面程序更准确应该是:

  retcode=recv(…)
  if(retcode=SOCKET_ERROR&&WSAGetLastError()=
  WSAEWOULDBLOCK)
  {…}

  4.重命名的函数

  有两种原因Berkeley 套接口中的函数必须重命名,以避免与其他的 API 冲突:

  ① close() 和closesocket()
  在Berkeley套接口中,套接口出现的形式与标准文件描述字相同,所以 close() 函数可以用来象关闭文件一样关闭套接口。在Windows Sockets API中,套接字和正常文件句柄不是等同的,例如read(),write() 和close() 在应用于套接口后不能保证正确工作。套接口必须使用 closesocket()例程来关闭,用close() 例程来关闭套接口是不正确的。

  ② ioctl()和iooctlsocket()
  Windows Sockets定义ioctlsocket() 例程,用于实现 BSD中ioctl() 和fcntl() 的功能。

  5.阻塞例程和 EINPROGRESS 宏

  虽然Windows Sockets 支持关于套接口的阻塞操作,但是这种应用是被强烈反对的,如果程序员被迫使用阻塞模式(例如一个准备移植的已有的程序,BSD 包含了大量的阻塞函数,且其默认的工作方式都是阻塞的),那么他应该清楚地知道Windows Sockets中阻塞操作的语义。

  6.指针

  所有应用程序与Windows Sockets 使用的指针都必须是FAR 指针,为了方便应用程序开发者作用,Windows Sockets规范定义了数据类型LPHOSTENT 。

  7. Windows Sockets支持的最大套接口数目

  一个Windows Sockets 应用程序可以使用的套接口的最大数目是在编译时由常量 FD_SETSIZE 决定的。这个常量在 select() 函数中被用来组建fd_set 结构。在WINSOCK.H 中缺省值是64。如果一个应用程序希望能够使用超过64个套接口,则编程人员必须在每一个源文件包含 WINSOCK.H 前定义确切的FD_SETSIZE值。有一种方法可以完成这项工作,就是在工程项目文件中的编译器选项上加入这一定义。 FD_SETSIZE定义的值对Windows Sockets实现所支持的套接口的数目并无任何影响。

  8.头文件

  为了方便基于 Berkeley 套接口的已有的源代码的移植, Windows Sockets支持许多 Berkeley头文件。这些 Berkeley头文件被包含在WINSOCK.H中。所以一个 Windows Sockets应用程序只需简单的包含 WINSOCK.H就足够了(这也是一种被推荐使用的方法)。

MCNP 减方差技巧(最全) MCNP的减方差技巧,核心在于不显著增加计算时间的前提下,通过修改模拟过程来降低结果的统计误差。尤其适用于,这类问题中粒子很难到达探测器区域,直接模拟效率极低栅元重要性是常用的减方差技巧,该方法主要对计算模型的不同区域定义不同的重要性数值。当粒子从重要性低的区域废物重要性高的区域,产生更多粒子,增大统计量;当从重要性高的区域进入重要性低的区域,会进行,增快计算效率。n= 中子,N;光子,P;电子 Exi= 栅元i的重要性I=栅元总数项目IMP卡是必须的,除非使用了WWN卡如果粒子进入0。 阅读详情

相关推荐

windows11 远程桌面连接 通过代理连接RDP桌面报错 错误代码0x904 拓展错误代码0x7

打开windows Defender防火墙设置--允许应用通过防火墙更改设置--允许其他应用浏览--进入C:\WINDOWS\system32目录选择mstsc.exe进入C:\Windows\SysWOW64目录h'qmstsc.exe添加后列表里多了一个远程桌面连接,还有一个Remote Desktop Connection,配置网络权限后保存连接成功。

weixin_43978891的博客 1万+

unix域套接字

【代码】unix域套接字。

qq_29975343的博客 455

一种基于因果干预的少样本学习的故障诊断模型

本文提出CIRNet,一种融合元学习与因果干预的少样本故障诊断框架。针对传统方法易学习伪相关特征的问题,CIRNet通过构建结构因果模型,采用类级和特征级双调整策略消除先验知识干扰。实验在多个轴承/齿轮数据集上验证其有效性,在跨组件任务中准确率最高达93.41%,特征可视化显示更好的类可分性。相比现有方法,CIRNet显著提升了模型泛化能力和可解释性。

hasakie的博客 955

windows及linux下,socket创建

#include <stdio.h> #include <string.h> #ifdef _WIN32 #include <WinSock2.h> #pragma commnet(lib, "ws2_32.lib"); #else #include <sys/socket.h> #include <sys/inet.h> #include <errno.h> #include <sys/time.h> #inc.

时间流浪者 1086

webview腾讯x5内核离线安装

离线集成腾讯TBS浏览器服务,彻底解决官方下载限流问题,永久免费

观千剑而后识器,操千曲而后晓声。 7909

从零实现机械臂抓取仿真:用MoveIt+Gazebo完成物体pick&place全流程

本文详细介绍了如何使用ROS的MoveIt框架与Gazebo仿真环境,从零构建机械臂抓取仿真系统。涵盖环境搭建、MoveIt配置、Gazebo集成、抓取动作实现等全流程,帮助开发者掌握机械臂控制的核心技术,实现高效的pick&place任务。

weixin_29250403的博客 476

windows下 为unix系统共享文件夹的方法

1、确认vmware-tools已经安装好了。这个需要在linux系统下安装。如果是非rpm包的linux系统,会在linux系统里自动挂载一个iso弹出vmtools包,解压缩,然后执行里面的安装脚本进行安装,然后还需进入/usr/bin下(记得好像是)执行以下pl脚本对vmtools进行配置。重启虚拟机发现linux可以修改分辨率时,说明安装好了。vmtools没安装好,share就不能设置;

situzhuge的专栏 1501

《统计学习方法》——李航 学习大纲

最近在学习李航写的统计学习方法概论, 每一章都用xmind理清了思路,括号里是书里的公式,第一次写博文,敬请指教~~~~ 第一章 统计学习方法论 第二章 感知机 每个方法其实只需要着重掌握三要素和输入输出就可以了,主要看模型、策略和算法。 感知机主要是二类分类的线性分类模型。 看到后面会注意感知机和支持向量机的区别。 第三章 k近

wjy619251334的博客 1万+

C++实现跨平台编程

跨平台编程

zc1239044730的博客 1080

从轴承润滑到代码实现:手把手教你用Python FDM求解稳态雷诺方程

本文详细介绍了如何用Python FDM(有限差分法)求解稳态雷诺方程,从轴承润滑理论到代码实现的全过程。通过构建无量纲方程、有限差分格式和迭代求解算法,开发者可以快速实现专业级润滑分析,应用于涡轮发电机、汽车曲轴等场景。文章还提供了完整的Python代码示例和结果可视化方法,帮助工程师优化轴承设计。

weixin_28689507的博客 119

Halcon 深度学习实战:PCB 缺陷检测模型的 TensorRT/OpenVino 加速推理

本文介绍了如何利用TensorRT和OpenVino对Halcon深度学习模型进行加速优化,以提升PCB缺陷检测系统的实时性能。文章详细阐述了模型加速框架的选择策略(根据硬件选用TensorRT或OpenVino)、优化流程实施(包括混合精度优化和模型导出)以及加速后的推理实现。实验结果表明,优化后的模型体积缩小40%,推理速度提升2-5倍(GPU环境下从79ms降至38ms,CPU环境下从3804ms降至2152ms),同时保持检测精度。通过完整的代码示例展示了从模型加速到实际部署的全流程,为工业视觉场景

LIN943168247的博客 535

Unix和Windows跨系统通讯编程2

四、 跨系统通讯编程实例  下面通过一个实例来具体说明 Socket 在Unix 和Windows 跨系统通讯编程中的应用。  Internet 上可以提供一种叫 IRC(Internet Relay Chatting,Internet 在线聊天系统)的服务。使用者通过客户端的程序登录到 IRC 服务器上,就可以与登录在同一 IRC 服务器上的客户进行交谈,这也就是平常所说的聊天室。在这里,给出了

juvencoco的专栏 1286

【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04

Jeson Orin Nano系列:烧写Ubuntu22.04 电脑主机可以是Ubuntu20.04

郭老二 4895

windows网络通讯端口

windows安全设置 一、windows网络通讯端口 1、端口分类    windows网络通讯端口可分为3大类: 1)公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常 这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。 2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一

kakusyunnrai的专栏 2111

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

unix到底有啥用_什么是 Unix 以及它为什么这么重要?

大多数操作系统可以被划分到两个不同的家族。除了微软的基于Windows NT的操作系统外,几乎所有其他的都可以追溯到Unix。 Linux,Mac OS X,Android,iOS,Chrome OS,PlayStaion 4上运行的Orbis OS,运行在路由器上的各种固件,所有这些操作系统通常都被称为“类Unix”操作系统。Unix的设计现在都还在应用Unix在20世纪60年代中晚期诞生于AT...

weixin_39837727的博客 1486

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

成立一个开源项目——ITC(线程间通讯)Prj

                   最近一段时间,狂看《UNIX编程艺术》,有感于unix编程的简洁,于是狂买了UNIX编程的几本大书《UNIX网络编程》,《UNIX系统编程》联合《windoows核心编程》一起看,于是想象,如何windows的线程间通过也能像unix进程那样,该多少,于是ITC项目就开始诞生了!!初步的想法是:      1)线程间(包括不同进程间的线程),能够互相发

小榕^_^(Littleroy)的专栏 2314

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

UNIX家族?一文讲清操作系统繁杂的家族史

简单讲讲操作系统的那些事,让不是做操作系统开发的同学也能大概认识操作系统这个出现在生活各处的东西

无聊人的有趣博客 2099

unix到底有啥用_究竟什么是Unix以及它为什么这么重要?

大多数操作系统可以被划分到两个不同的家族。除了微软的基于WindowsNT的操作系统外,几乎所有其他的都可以追溯到Unix。Linux,MacOSX,Android,iOS,ChromeOS,PlayStaion4上运行的OrbisOS,运行在路由器上的各种固件,所有这些操作系统通常都被称为“类Unix”操作系统。Unix的设计现在都还在应用Unix在20世纪60年代中晚期诞生于AT...

weixin_39965161的博客 1211

Windows下 POSIX 线程编程

1. POSIX 标准        POSIX是Portable Operating System Interface of Unix的缩写。由IEEE(Institute of Electrical and Electronic Engineering)开发,由ANSI和ISO标准化。        POSIX的诞生和Unix的发展是密不可分的,Unix于70年代诞生于Bell lab,并

Kevin的专栏 7257

Unix与Windows编程对比一览

转自:http://hi.baidu.com/%CC%EC%C9%BD/blog/item/9a25d6cafc5d2441f31fe710.html 转自:http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/index.html 转自:http://www.tzlink.com/info/show.php?aid=872

一个人,在路上 724

对 DB2 UDB V8 for UNIX、Linux 和 Windows 的生动简介

内容:简介案例研究结束语关于作者对本文的评价订阅:developerWorks 时事通讯Raul F. ChongIBM 多伦多实验室2003 年 1 月 您习惯于通过图像进行直观学习吗?这篇有关 DB2 的图解简介将会使您在学习 DB2 环境的主要概念方面节省一些时间。简介如果对于 IBM® DB2® Universal Database™(UDB)for Linux、UNIX® 和 Windo

1106
上一篇: 张小龙谈如何写E-mail软件
下一篇: Unix和Windows跨系统通讯编程2
juvencoco
博客等级 码龄25年 2粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值