《Java网络编程》摘要

JAVA 网络编程 文章目录1. 网络编程2.计算机网络基础知识2.1 计算机网络:2.2 网络通讯的要素2.3 IP地址2.3.1 IP地址的分配2.3.2 IP地址的分类3. 端 口4. 常用默认端口5.网络通信协议/接口6. OSI的七层模型7. TCP协议8. IP协议(Internet Protocol/因特网互联协议)是网络上的计算机进行连接的基础9. TCP/IP协议9.1 InetAddressSoc... 阅读详情

流

应当在关闭流之前立即刷新输出所有流。否则,关闭流时留在缓冲区中的数据可能会丢失

java.security.DigestInputStream流关闭后,依然可以获取消息摘要

mark()方法标记流的当前位置,reset()方法把流重置到标记的位置.
markSupported(),

PrintStream问题
1. println()的输出是与平台有关的
2. PrintStream假定使用所在平台的默认编码方式
3. PrintStream吞掉了所有异常

writeUTF()有问题????[Java网络编程P49]

DataInputStream.readLine()和BufferedReader.readLine()有bug

OutputStreamWriter有返回对象编码方式的方法:
public String getEncoding()

线程

线程调度
1. 抢占式: 一个线程轮询到CPU时,会暂停当前线程
2. 协作式: 正在运行的线程自己暂停,才会将CPU控制权交给其他线程

线程暂停锁释放情况
1. I/O阻塞不会释放线程已经拥有的锁
2. Thread.yield()并不会释放线程拥有的锁
3. Thread.sleep()进入休眠,仍然拥有它已经获得的锁
4. 调用对象的等待时,调用它的线程会释放所等待的对象的锁(但不会释放它所拥有的其他对象的锁)

网络编程

InetAddress

IP地址访问:
byte[] address = {107, 23, (byte)216, (byte)196};
InetAddress lessWrong = InetAddress.getByAddress(address);
InetAddress lessWrongWithname = InetAddress.getByAddress(“lesswrong.com”, address);

控制DNS缓存时间:
用系统属性networkaddress.cache.ttl和networkaddress.cache.negative.ttl来控制缓存

给定地址,找出主机名:
InetAddress ia = InetAddress.getByName(“208.201.239.100”);
System.out.println(ia.getCanonicalHostName());

地址长度:
byte[] address = ia.getAddress();
if(address.length == 4) return Version4;
else if(address.length == 16) return Version6;

通配地址(wildcard address):
IPv4中: 0.0.0.0
IPv6中: 0:0:0:0:0:0:0:0也写为::
回环地址(loopback address):
IPv4中: 127.0.0.1
IPv6中: 0:0:0:0:0:0:0:1也写为::1
测试可达性:
isReachable()

NetworkInterface类
NetworkInterface对象表示物理硬件和虚拟地址
NetworkInterface ni = NetworkInterface.getByName(“eth0”);
NetworkInterface.getByInetAddress(local);
Enumeration< NetworkInterface > = NetworkInterface.getNetworkInterfaces();

NetworkInterface eth0 = NetworkInterface.getByName(“eth0”);
Enumeration addresses = eth0.getInetAddresses();

URL和URI

java.net.URI类 只标识资源
java.net.URL类 既能标识资源,又能获取资源
openStream(): 直接打开文件流
openConnection(): 打开链接,可以访问服务器发送的所有数据,包括协议的元数据,HTTP首部以及原始HTML
getQuery()返回URL的查询字符串
URL的equals可能是一个阻塞的I/O操作. 应当避免将URL存储在依赖equals的数据结构中,如java.util.HashMap.而使用java.net.URI
URL.toURI() URI.toURL()
URI.create()
URI isOpaque() 不分层的URI
URLEncoder.encode(“str”, “UTF-8”); 它对URL或查询字符串中使用的特殊字符(如/和=)和需要编码的字符不加区分
设置代理服务器的域名或IP地址: System.setProperty(“http.proxyHost”, “192.168.254.254”);
设置代理服务器的端口: System.setProperty(“http.proxyPort”, “9000”);
禁止代理: System.setProperty(“http.nonProxyHosts”, “xml.oreilly.com”);
对应ftp代理设置: ftp.proxyHost, ftp.proxyPort, ftp.nonProxyHosts
TCP的SOCKS代理: socksProxyHost,socksProxyPort ; SOCKS没有提供禁止代理选项,是”全有或全无”的选择
Proxy类: Proxy.Type.DIRECT, Proxy.Type.HTTP, Proxy.Type.SOCKS
SocketAddress address = new InetSocketAddress(“proxy.example.com”, 80);
Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
Authenticator:

HTTP

系统属性控制HTTP Keep-Alive:
http.keepAlive
http.maxConnections
http.keepAlive.remainingData
sun.net.http.errorstream.enableBuffering
sun.net.http.errorstream.bufferSize
sun.net.http.errorstream.timeout

URLConnection

getContentType()
getContentLength()
getContentLengthLong()
getHeaderField(String)
getHeaderFieldKey(int)
getHeaderField(int)
getErrorStream()
如果预先不知道数据大小,可以使用分块传输编码方式 setChunkedStreamingMode() ; 分块传输编码会妨碍身份认证和重定向.

Socket

shutdownInput()
shutdownOutput()
即使半关闭连接,或将连接的两半都关闭,使用结束后仍需要关闭该socket
/etc/services 查看哪些服务驻留在哪个端口

设置TCP_NODELAY为true,setTcpNoDelay(true)关闭Socket的缓冲, 所有包一旦就绪就会发送.

SO_LINGER选项指定Socket关闭时如何处理尚未发送的数据报。SO_LINGER开启,close()会阻塞指定的秒数,直到数据发送完毕或超时(指定为0秒,则close()直接超时)。如果是超时,则所有未发送的数据包都将丢弃。当SO_LINGER关闭,close()方法立即返回,但系统仍会尝试发送剩余的数据. 也即开启SO_LINGER,则Socket关闭如果超过指定时间,则丢弃未发送的数据。禁用SO_LINGER,Socket关闭,则后台处理发送未处理的数据.

setReceiveBufferSize()/setSendBufferSize():
网络本身对最大带宽是有限制的。将缓冲区大小设置过高,程序会试图以过高的速度发送和接收数据,而网络来不及处理,就会导致拥塞、丢包和性能下降。因此,要得到最大带宽,需要让缓冲区大小与连接的延迟匹配,使它稍小于网络的带宽. 尽管看起来应该能独立地设置发送和接收缓冲区,但实际上缓冲区通常会设置为二者中较小的一个.

如果打开了SO_KEEPALIVE,客户端偶尔会通过一个空闲连接发送一个数据包,已确保服务器未崩溃.如果没有SO_KEEPALIVE,不活动的客户端可能会永远存在下去,而不会注意到服务器已经崩溃.

TCP包括一个可以发送单字节带外“紧急”数据的特性。这个数据会立即发送。此外,当接收方收到紧急数据时会得到通知,在处理其他 已收到的数据之前,可以选择先处理这个紧急数据.
sendUrgentData(int)会立即发送参数中的最低位字节.如果必要,当前缓存中的所有数据将首先刷新输出

如果Socket绑定到一个已知端口,会阻止所有其他Socket同时使用这个端口。如果开启SO_REUSEADDR(默认为关闭),就允许另一个Socket绑定到这个端口,即使此时仍有可能存在前一个Socket未接收的数据. 之前连接的Socket和重用老地址的新Socket都必须设置SO_REUSEADDR为true,才能生效.

服务类型存储在IP首部中一个名为IP_TOP的8位字段中.业务流类型以0到255之间的int给出。由于这个值要复制到TCP首部中的一个8位字段,所以只使用这个int的低字节,超出这个范围的值会导致IllegalArgumentException异常.

setTrafficClass()/setPerformancePreferences(int,int,int)可能是无操作

ServerSocket

ServerSocketChannel, Selector,SocketChannel
测试ServerSocket是否打开
public static boolean isOpen(ServerSocket ss){
return ss.isBound() && !ss.isClosed();
}

SSLSocketFactory

SSLServerSocket, SSLServerSocketFactory
server.getSupportedCipherSuites()
server.getEnabledCipherSuites()

NIO

client.read(buffer);
buffer.flip();
out.write(buffer);
buffer.clear();
flip()方法将限度设置为当前位置,位置设置为0: public final Buffer flip() 希望排空刚刚填充的缓冲区时可以调用此方法.channel.write(…)前
ByteBuffer.allocate()
ByteBuffer.wrap() 修改数组会反映到缓冲区,反之亦然,所以对数组操作结束前不要包装数组
buffer.get() 获取一个数据,并将position加1
get(int), put(int,byte) 不改变位置
if(buffer.order().equals(ByteOrder.BIG_ENDIAN)){
buffer.order(ByteOrder.LITTLE_ENDIAN);
}
remaining()方法返回缓冲区中当前位置与限度之间的元素数。如果剩余元素大于0,hasRemaining()方法返回true.
位置达到限度时,hasRemaining()返回false.
SocketChannel类只有读/写ByteBuffer的方法。它无法读/写任何其他类型的缓冲区.
示例中两个缓冲区(原ByteBuffer和视图IntBuffer)的位置和限度是独立的,必须分别考虑.
非阻塞模式不能保证缓冲区在排空后仍能以int,double或char等类型的边界对齐.向非阻塞通道写入一个int或double
的部分是完全有可能的。使用非阻塞I/O时,在向视图缓冲区放入更多数据前,要确保检查这个问题。
压缩缓冲区?????怎么用?????

下面的循环会一直读取数据,直到缓冲区填满或者检测到流末尾为止:
while(buffer.hasRemaining() && channel.read(buffer) !=-1);

SelectionKey.OP_ACCEPT
SelectionKey.OP_CONNECT
SelectionKey.OP_READ
SelectionKey.OP_WRITE

UDP

DatagramSocket,DatagramPacket
TCP端口和UDP端口没有任何关联。对于两个不同的程序,如果一个使用UDP而另一个使用TCP,那么它们可以使用相同的端口号。
UDP的发送和接收都使用DatagramSocket.接收数据时,指定端口号.发送数据时,DatagramSocket不指定端口号,端口号在DatagramPacket中指定.

IP组播

ping all-routers.mcast.net
MulticastSocket
ms.joinGroup(groupInetAdd);
ms.leaveGroup(groupInetAdd);
getLoopbackMode()返回值有问题(是反的)

问题

P263 : 三个Socket和转发优先级不知是怎么匹配的(代码中好像写错了,前面描述中高6位是DSCP,低两位是ECN, 而代码中是低6位DSCP,高两位ECN)

Java 程序设计语言前言摘要 Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。 1991年,Sun公司的James Gosling,Bill Joe等人,为电视、控制烤面包机等家用电器的交互操作开发了一个Oak(橡树)软件,他是Java的前身。当时,Oak并没有引起人们的注意,直到1994年,随着互联网和3W的飞速发展,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,得以研发和发展。由于Oak商标已经被Oak Technology注册,1995年Oak短暂更名为Green,最后更名为Java。Java的得名还有段小插曲呢,一天,Java小组成员正在喝咖啡时,议论给新语言起个什么名字的问题,有人提议用Java(Java是印度尼西亚盛产咖啡的一个岛屿),这个提议得到了其他成员的赞同,于是就采用Java来命名此新语言。 立即下载

相关推荐

STM32驱动电磁阀电路设计:从光耦选型到MOSFET驱动的实战解析

本文深入解析了STM32驱动24V电磁阀的完整电路设计,重点探讨了光耦选型与MOSFET驱动两大核心环节。针对电平转换与电气隔离需求,详细对比了EL357N与TLP2310等光耦在CTR、速度及耐压等关键参数上的差异与应用场景。同时,文章提供了MOSFET关键参数解读、驱动电路优化方案(如推挽驱动)以及完整的PCB布局、电源处理与调试避坑指南,旨在帮助工程师构建稳定可靠的工业控制电路。

weixin_29184371的博客 234

网络编程

OSI(Open System Interconnection 开放系统互连)参考模型     TCP/IP 参考模型     七层描述     1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这

qq_29856871的博客 289

别再瞎改注册表了!实测Win10/Win11远程桌面60帧的正确姿势(附ToDesk对比)

本文深入解析Windows远程桌面60帧优化的科学方法,揭示常见误区并提供实测有效的解决方案。从版本差异到硬件加速,再到第三方工具对比(如ToDesk),帮助用户避开无效的注册表修改,实现流畅的远程桌面体验。

weixin_33738555的博客 344

java网络编程

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。应用场景:即时通信、网游对战、金融证券、国际贸易、邮件、等等不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输。Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序BS架构(可以通过网页直接访问)CS架构(需要用户安装APP)BS架构的优缺点不需要开发客户端,只需要页面+ 服务端用户不需要下载,打开浏览器就能使用如果应用过大,用户体验受到影响CS架构的优缺点画面可以做的非常精美,用户体验好。

m0_52896041的博客 1135

11 CO配置-控制-成本中心会计-定义分割结构(OKES-Define Splitting Structure)

业务背景:定义分割结构 事务码: OKES SPRO路径:SPRO->控制->成本中心会计->实际过账->期末结算->作业分配->划分->定义分割结构 第1步,SPRO路径进入 第2步,选择“新的条目”创建 分割结构 第3步,选择分割结构代码 点击“分割规则”进行下一个界面,点击“新条目”创建 分割结构规则 第4步,点击“为规则选择” 为分割结构规则创建版本并保存 第5步,选择“分配”,点击“新的条目” 输入分割结构分配

4372

手把手教你用VM实现欧姆龙PLC数据采集(含Fins协议配置详解)

本文详细介绍了如何使用VM(VisionMaster)实现与欧姆龙PLC的数据采集,重点解析了Fins协议(包括Fins TCP/UDP)的配置步骤。从网络环境搭建、PLC的IP地址设置,到VM端Fins通讯通道的详细配置与数据点映射,提供了完整的实战指南。文章还涵盖了数据收发解析、常见问题排查清单,帮助工程师快速完成视觉系统与PLC的稳定集成。

weixin_29171087的博客 189

网络编程(总结)

网络编程(总结) 1.1概述 地球村:你在西安,你一个美国的朋友! 信件: 计算机网络: 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 网络编程的目的: 无线电台…传播信息,数据交换。通信 想要达到这个效果需要什么: 如何准确的定位网络上的一台主机 192.168.16.124 :端口,定位到这个计算机上的某个资源 找到这个主机,如何传输数据呢?

Xun_independent的博客 406

记录:N10激光雷达串口编程,将数据存进 SQLite,并进行 ROS2 - cartographer 单雷达建图

N10 系列采用 TOF(time of flight)测距原理,通过测量调制激光的发射、返回时间差来测量物体与传感器的相对距离。激光发射器发出调制脉冲激光,内部定时器开始 从t1时刻计算时间,当激光照射到目标物体后,部分能量返回,当雷达接收到返回的激光信号时,在t2时刻停止内部定时器计时,光速C,激光雷达到达物体的距离D为:经过N10系列激光雷达内嵌的信号处理单元的实时解算得到探测物体的距离值,结合高精度自适应角度测量模块输出的角度信息,可以得到量程内周围 360 度环境 的二维平面信息。

m0_74013893的博客 1096

TCP/IP网络编程 --摘要一

https://book.douban.com/subject/25911735/ 内容: 第1章 理解网络编程和套接字 套接字是网络数据传输用的软件设备 服务端 -- #include 第一步:调用socket函数创建套接字 int socket(int domain, int type, int protocol); 第二步:调用bind函数分

学习日记 363

手把手教你用UC3844设计多路输出反激电源(附PCB布局避坑指南)

本文详细介绍了使用UC3844设计多路输出反激电源的实战技巧,包括核心电路设计、变压器参数计算、PCB布局优化及EMI抑制方法。通过实验室实测数据和项目经验,帮助工程师避开常见设计陷阱,提升电源性能和可靠性。特别附赠PCB布局避坑指南,助力高效完成开关电源设计。

weixin_30300225的博客 570

DeerFlow 系列教程 附录 | 核心文件索引、官方文档索引与推荐阅读顺序

DeerFlow 系列教程 附录本附录汇集了 DeerFlow 项目的核心文件索引、官方文档索引和推荐阅读顺序三份速查资料,方便读者在日常开发和学习中快速定位关键代码与文档。内容按实际项目目录结构整理,所有路径均基于 DeerFlow 2.0 版本验证。

weixin_43674738的博客 328

Java 网络编程(大全)

浏览器就是我们日常使用的浏览器去访问各种网站,只要有浏览器就可以访问,不依赖特定的PC端,在任意设备上都可以访问网站服务器。不需要建立连接(因为把数据源IP、目的地IP、端口封装成数据包),每个数据包在64KB内,只管发,不管对方有没有接到确认什么的。IP地址可以理解为具体哪个计算机,端口理解计算机上的程序(一个程序一个端口),协议理解为电脑通过什么方式和外界交互。客户端是需要程序员去开发的,例如日常使用的各种的APP,服务端就是服务器。一、2请分析C/S和B/S架构相比的各自的优缺点?

快乐学习 1万+

SAP在sap我定义了三个帐套 T9 SGD,I9 CNY, C9 CMY 想使用三个不同的币种,那么 我在定义和激活非主分类账时 如何定义各自的币种 ?

摘要:在SAP中为非主分类账(T9、I9、C9)配置不同币种(SGD、CNY、MYR),需通过三个步骤实现:1)在FINSC_LEDGER中定义分类账货币类型;2)在OB22中为公司代码0919配置平行货币;3)在"定义和激活非主分类账"中关联币种。关键注意事项包括维护自定义货币类型(以Y/Z开头)、设置OB08汇率以及独立汇率评估。完成后可通过FB50测试凭证和FAGLL03验证各账套的币种金额显示。

金牌架构师 1012

java程序设计之网络编程基础教程_《Java程序设计之网络编程基础教程》李芝兴著【摘要 书评 在线阅读】-苏宁易购图书...

书名:Java程序设计之网络编程基础教程ISBN:9787302299417出版社:清华大学出版社作者:李芝兴页数:413出版日期:2012年12月参考重量:0.650Kg定价:30.00元货号:3074617*图书目录*第1章Java语言概述1.1 Java语言的产生及其特点1.1.1 Java语言发展简史1.1.2 Java虚拟机1.1.3 Java平台是不断扩展的计算平台1.1.4 Java...

weixin_39633954的博客 155

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java 高层网络编程

Java 高层网络编程Qusay H. Mahmoud 著 2002-11-14边城狂人 译 2002-12-10 基于 HTTP 的应用程序  java.net 包中的类和接口提供了可用于低层和高层网络编程的 API。低层 API 可以让你直接访问网络协议,但是为此你不得不使用低层的 TCP 套接字和 UDP 数据包。高层的 API (如 URL, URLConnection 和

iamfancy的专栏 1606

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java中使用MD5进行计算摘要

java中使用MD5进行加密 在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉。(一)消息摘要简介 一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。...

aodaidi6752的博客 132

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java网络编程

Java网络编程 1、网络编程 1.1、概述 1、计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。 2、Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。 3、Java提供的网络类库,可以实现无痛的网络连

laizhenghua的博客 1万+

【Java网络编程详解】

Java网络编程是开发分布式应用程序的重要技能,它通过套接字(Socket)进行数据传输,支持TCP和UDP协议。本文将介绍Java网络编程的基础知识,包括Socket、ServerSocket、TCP通信、UDP通信、常用类和示例代码。网络编程是指在计算机之间通过网络进行数据传输和通信的编程方式。Java提供了强大的java.net包,封装了底层的网络协议,简化了网络编程。:面向连接,可靠传输,保证数据按序到达,适合文件传输、Web通信等。:面向无连接,不可靠但速度快,适合视频通话、广播消息等。

武帝为此的博客 958

Java基础之Java网络编程详解

网络编程是现代软件开发中不可或缺的一部分,它通过网络实现了计算机之间的通信,使得信息交换和数据共享成为可能。在网络通信的实现过程中,语言的选择和工具的使用至关重要,而Java提供了强大的支持,使得开发者可以更便捷地构建网络应用程序。网络通信的核心是数据的发送与接收,而Java的网络编程模型为此提供了一套易用且高效的工具。无论是点对点的通信,还是基于更复杂协议的多节点交互,Java都能满足需求。在网络编程中,基础的通信模式是基于Socket的点对点连接,它可以实现客户端和服务器之间的直接通信。

道可道非常道 2068

Java语言的网络编程

Java网络编程是一个庞大而复杂的领域,从基本的Socket编程到高级的HTTP处理,Java提供了丰富的工具和类库供开发者使用。了解并掌握Java网络编程,可以帮助开发者构建可靠、高效的网络应用。随着技术的不断发展,网络编程的方法和工具也在不断进步,开发者应保持学习的热情与敏锐的观察力,跟上时代的步伐。希望通过本文的讲解,能帮助您对Java网络编程有更深的理解和认识。无论是构建简单的客户端-服务器模型,还是开发复杂的Web应用,Java都能提供强大的支持。

xiaocaibao777的博客 1218

【Java 基础】Java 网络编程

Java的网络编程是指使用Java语言进行网络通信的编程技术。在Java中,可以使用Socket和ServerSocket类来实现基于TCP协议的网络通信,也可以使用DatagramSocket和DatagramPacket类来实现基于UDP协议的网络通信。

激流丶的博客 1890

Java 网络编程

Java网络编程是指使用Java语言实现的网络通信技术。它允许在不同计算机之间进行数据传输和资源共享。计算机网络基础:在深入Java网络编程之前,需要了解计算机网络的基本概念,包括计算机网络的作用、OSI参考模型以及TCP/IP协议簇等。这些是网络编程的理论基础。网络编程三要素:进行网络编程时,需要关注三个核心要素:协议、IP地址和端口号。协议定义了数据通信的规则,IP地址用于定位网络上的设备,而端口号则是用来识别设备上的具体应用程序。Java网络编程API。

weixin_74521994的博客 1405
上一篇: ThreadLocal类
下一篇: 红黑树
ProgramResearch
博客等级 码龄11年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值