ICE

Java-ICE入门教程(2-1:ICE基础知识) 1、ICE是什么?  ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够以最小的代价构建分布式应用程序。ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数 阅读详情

关于Ice请见, 
ICE之轻量级分布式通讯中间件 
http://masterkey.iteye.com/blog/182954 
ZeroC ICE之旅------C++ 
http://masterkey.iteye.com/blog/183307 
ZeroC ICE之旅------Slice 
http://masterkey.iteye.com/blog/184064 
ZeroC ICE之旅------多语言互通互联 
http://masterkey.iteye.com/blog/183742 
ZeroC ICE之旅------集群和容错 
http://masterkey.iteye.com/blog/185081 
更多ICE文章,请关注: 
Titan的天空 
http://masterkey.iteye.com 

工欲善其事,必先利其器,我们首先从www.zero.com,下载最新安装包; 
btw: 

目前最新的v3.4 
http://www.zeroc.com

最新稳定版本: 
http://www.zeroc.com/download.html 


由于我自己的平台是CentOS release 5.3 (Final),java version "1.6.0_01" 
所以下载的是: 
http://www.zeroc.com/download/Ice/3.4/Ice-3.4.2-rhel5-x86_64-rpm.tar.gz
解开之后: 
-rw-r--r-- 1 222 mysql 1341046 Jun  4  2010 db48-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql   51886 Jun  4  2010 db48-devel-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 1180156 Jun  4  2010 db48-java-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql  120935 Jun  4  2010 db48-utils-4.8.30-1ice.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql   91574 Jun 16 05:36 ice-3.4.2-1.rhel5.noarch.rpm
-rw-r--r-- 1 222 mysql  531513 Jun 16 05:36 ice-c++-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 2837924 Jun 16 05:36 ice-java-3.4.2-1.rhel5.noarch.rpm
-rw-r--r-- 1 222 mysql  282937 Jun 16 05:36 ice-java-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 3371844 Jun 16 05:36 ice-libs-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql  200760 Jun 16 05:36 ice-php-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql   65172 Jun 16 05:36 ice-php-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 1069585 Jun 16 05:36 ice-python-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql   32678 Jun 16 05:36 ice-python-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql  238228 Jun 16 05:36 ice-ruby-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql   25797 Jun 16 05:36 ice-ruby-devel-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 3301850 Jun 16 05:36 ice-servers-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql  175745 Jun 16 05:36 ice-sqldb-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql 4545116 Jun 16 05:36 ice-utils-3.4.2-1.rhel5.x86_64.rpm
-rw-r--r-- 1 222 mysql   97474 Jun  4  2010 mcpp-devel-2.7.2-2ice.rhel5.x86_64.rpm

由于需要c和java的包: 
所以我们仅安装:

irpm -ivh ce-3.4.2-1.rhel5.noarch.rpm

irpm -ivh  db48*
rpm -ivh ice-libs-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh ice-utils-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh mcpp-devel-2.7.2-2ice.rhel5.x86_64.rpm
rpm -ivh ice-servers-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh ice-c++-devel-3.4.2-1.rhel5.x86_64.rpm
rpm -ivh ice-java* 

安装之后的Ice相关路径: 
在/usr/bin/下有:

slice2cpp
slice2freeze
slice2freezej
slice2html
slice2java

 
存储于 /usr/share/java/下 有:

nt-ice-3.4.2.jar  db-4.8.30.jar     Freeze.jar     IceGridGUI-3.4.2.jar  Ice.jar
ant-ice.jar        Freeze-3.4.2.jar  Ice-3.4.2.jar  IceGridGUI.jar


相关的Ice的库存储于/usr/lib下. 

一切就绪,我们开始Ice之旅的Slice地带: 
首先,我们建立一个demo.ice的文件: 

Java代码 
  1. module Demo{   
  2. interface test{   
  3.  string   execute(string mth,string cmd);   
  4. };   
  5. };  

注意:string 确实是小写(java开发人员注意)

module Demo{
interface test{
 string   execute(string mth,string cmd);
};
};


注意,后两个"}"一定要包含";",否则slice2java就会过不去,赫赫 
执行: 
slice2java demo.ice 

会在当前目录产生一个Demo目录,目录下自动生成:  
-rw-r--r-- 1 root root 1021 Dec  1 11:03 Callback_test_execute.java 
-rw-r--r-- 1 root root 2450 Dec  1 11:03 _testDelD.java 
-rw-r--r-- 1 root root  693 Dec  1 11:03 _testDel.java 
-rw-r--r-- 1 root root 2069 Dec  1 11:03 _testDelM.java 
-rw-r--r-- 1 root root 4311 Dec  1 11:03 _testDisp.java 
-rw-r--r-- 1 root root 1011 Dec  1 11:03 testHolder.java 
-rw-r--r-- 1 root root  617 Dec  1 11:03 test.java 
-rw-r--r-- 1 root root  621 Dec  1 11:03 _testOperations.java 
-rw-r--r-- 1 root root  602 Dec  1 11:03 _testOperationsNC.java 
-rw-r--r-- 1 root root 8187 Dec  1 11:03 testPrxHelper.java 
-rw-r--r-- 1 root root  707 Dec  1 11:03 testPrxHolder.java 
-rw-r--r-- 1 root root 1365 Dec  1 11:03 testPrx.java 
到目前为止,demo.ice所以Ice接口部分的定义以及相关依赖都已经自动生成. 

我们要实现自己的execute方法,覆盖testPrx.java的同名方法: 
Java代码 
  1. //TestImp.java   
  2. package Demo;   
  3.   
  4. import Ice.Current;   
  5.   
  6.   
  7. public class TestImp extends _testDisp{   
  8.   
  9.     public String execute(String mth, String cmd, Current __current) {   
  10.         // TODO Auto-generated method stub   
  11.         return mth+cmd;   
  12.     }   
  13.   
  14.   
  15.   
  16. }  
//TestImp.java
package Demo;

import Ice.Current;


public class TestImp extends _testDisp{

	public String execute(String mth, String cmd, Current __current) {
		// TODO Auto-generated method stub
		return mth+cmd;
	}



}
看到了,就是这么简单,仅仅覆盖_testDisp里面的抽象方法,实现把我们自己的实现代码填充到里面就行了. 
之后,我们建立一个Server服务在10000端口进行侦听。 
Java代码 
  1. //Server.java   
  2. package Demo;   
  3.   
  4. public class Server {   
  5.     public static void main(String[] args) {   
  6.         int status = ;   
  7.         Ice.Communicator ic = null;   
  8.         try {   
  9.             ic = Ice.Util.initialize(args);   
  10.             Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(   
  11.                     "TestAdapter", "default -p 10000");   
  12.             Ice.Object object = new TestImp();   
  13.             adapter.add(object, ic.stringToIdentity("TestAdapter"));   
  14.             adapter.activate();   
  15.             ic.waitForShutdown();   
  16.         } catch (Ice.LocalException e) {   
  17.             e.printStackTrace();   
  18.             status = 1;   
  19.         } catch (Exception e) {   
  20.             System.err.println(e.getMessage());   
  21.             status = 1;   
  22.         }   
  23.         if (ic != null) {   
  24.             // Clean up   
  25.             //   
  26.             try {   
  27.                 ic.destroy();   
  28.             } catch (Exception e) {   
  29.                 System.err.println(e.getMessage());   
  30.                 status = 1;   
  31.             }   
  32.         }   
  33.         System.exit(status);   
  34.     }   
  35. }  
//Server.java
package Demo;

public class Server {
	public static void main(String[] args) {
		int status = 0;
		Ice.Communicator ic = null;
		try {
			ic = Ice.Util.initialize(args);
			Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(
					"TestAdapter", "default -p 10000");
			Ice.Object object = new TestImp();
			adapter.add(object, ic.stringToIdentity("TestAdapter"));
			adapter.activate();
			ic.waitForShutdown();
		} catch (Ice.LocalException e) {
			e.printStackTrace();
			status = 1;
		} catch (Exception e) {
			System.err.println(e.getMessage());
			status = 1;
		}
		if (ic != null) {
			// Clean up
			//
			try {
				ic.destroy();
			} catch (Exception e) {
				System.err.println(e.getMessage());
				status = 1;
			}
		}
		System.exit(status);
	}
}

貌似很复杂,其实里面的很多内容都是固定格式,有些部分需要固定和约定。其中上述红色部分是修改部分。 

到目前为止,我们已经完成了大部分工作,我们还需要建一个客户端来对服务端的方法进行调用。 
Java代码 
  1. package Demo;   
  2.   
  3. public class Client {   
  4.     public static void main(String[] args) {   
  5.         int status = ;   
  6.         Ice.Communicator ic = null;   
  7.         try {   
  8.             ic = Ice.Util.initialize(args);   
  9. //          Ice.ObjectPrx base = ic   
  10. //                  .stringToProxy("SimplePrinter:tcp -h 172.17.12.101 -p 10000");   
  11.             Ice.ObjectPrx base = ic   
  12.             .stringToProxy("TestAdapter:default -p 10000");   
  13.   
  14.             testPrx test = testPrxHelper.checkedCast(base);   
  15.             if (test == null)   
  16.                 throw new Error("Invalid proxy");   
  17.             System.out.println(test.execute("My first Ice ", "demo"));   
  18.             //System.out.println("ok");   
  19.         } catch (Ice.LocalException e) {   
  20.             e.printStackTrace();   
  21.             status = 1;   
  22.         } catch (Exception e) {   
  23.             System.err.println(e.getMessage());   
  24.             status = 1;   
  25.         }   
  26.         if (ic != null) {   
  27.             // Clean up   
  28.             //   
  29.             try {   
  30.                 ic.destroy();   
  31.             } catch (Exception e) {   
  32.                 System.err.println(e.getMessage());   
  33.                 status = 1;   
  34.             }   
  35.         }   
  36.         System.exit(status);   
  37.     }   
  38. }  
package Demo;

public class Client {
	public static void main(String[] args) {
		int status = 0;
		Ice.Communicator ic = null;
		try {
			ic = Ice.Util.initialize(args);
//			Ice.ObjectPrx base = ic
//					.stringToProxy("SimplePrinter:tcp -h 172.17.12.101 -p 10000");
			Ice.ObjectPrx base = ic
			.stringToProxy("TestAdapter:default -p 10000");

			testPrx test = testPrxHelper.checkedCast(base);
			if (test == null)
				throw new Error("Invalid proxy");
			System.out.println(test.execute("My first Ice ", "demo"));
			//System.out.println("ok");
		} catch (Ice.LocalException e) {
			e.printStackTrace();
			status = 1;
		} catch (Exception e) {
			System.err.println(e.getMessage());
			status = 1;
		}
		if (ic != null) {
			// Clean up
			//
			try {
				ic.destroy();
			} catch (Exception e) {
				System.err.println(e.getMessage());
				status = 1;
			}
		}
		System.exit(status);
	}
}


也貌似很复杂吧,其实不然,也很简单,同样包含很多固定格式。其中 

Java代码 
  1. System.out.println(test.execute("my first Ice ", "demo"));  
System.out.println(test.execute("my first Ice ", "demo"));



是我们自己调用的逻辑。 

赫赫,大功告成了,现在我们开始运行Server,再运行Client看到了么? 
"My first Ice demo" 

得到这样的结果,基本Ice之旅的Java部分简单实例我们基本完成。 

Ice的性能和稳定性远超于我们的想象,skype知道么?其部分通讯架构就是采用的Ice.

ZeroC ICE(一) ZeroC ICE入门学习 ZeroC ICE(一) ZeroC ICE入门学习目 录1 ZeroC ICE入门学习 11.1 ZeroC ICE原理图 11.2 RPC框架的性能对比 11.3 前置条件 11.4 ZeroC ICE 安装 11.5 修改注册中心配置 11.6 修改node节点配置 11.7 Windows客户端安装 11.8 连接Ice 阅读详情

相关推荐

ICE基础概念深入解析

关于ICE的介绍,网上的资料有很多,但是从应用的角度上去评述的并不多,在技术革新的今天我们可能更多的是去关注应用领域而非研究领域,因此根据 我个人的使用经验,想对ICE技术做一些总结和介绍。什么是ICE(Internet Communications Engine)呢,它是由Zeroc公司开 发的一套开源中间件系统,与DCOM,CORBA,WEB SERVICEDcom类似,支持RPC(Remot...

KnightOnHorse的博客 3393

使用zeroc ice框架java快速入门

一. 准备工作 1.下载ice3.6 官网下载地址 下载后点击安装 2. 配置环境 想必大家如果要用到ice,配置环境都是小菜一碟了,这里也就不多赘述,网上百度一堆. ICE_HOME= C:\ZeroC\Ice-3.6.4 Path= %ICE_HOME%\bin; cmd命令输入slice2java -v ,如果显示3.6.4代表配置ok 3. 编译插件slice2ja...

zzzgd_666的博客 6314

爬取微博热搜并分析情绪趋势:NLP + 可视化一体化实践

本文介绍了如何用Python构建微博热搜关键词爬取与情绪分析系统。通过requests库获取微博热搜数据,使用snownlp进行中文情绪分析(0-1评分),并借助pandas、matplotlib和seaborn实现数据可视化。文章提供了从环境配置、数据采集到情绪计算和趋势图绘制的完整代码示例,同时建议扩展思路包括评论分析、多维度情绪分类和舆情预警系统搭建。这套方法可以帮助快速洞察公众情绪变化,为舆情监测和市场研究提供数据支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 824

基于JAVA的ICE服务端实现

前言 ICE版本使用3.6.4:Ice-3.6.4.msi 链接:https://pan.baidu.com/s/1QwvLDcVPRaM52p1jU0lhrg 提取码:8iso 开发环境使用IDEA: ideaIU-2020.2.3.exe 链接:https://pan.baidu.com/s/1XuA_A-9BeU5hOrDREJvzTA 提取码:ybyq 安装ICE 首先安装Ice,选择安装路径D:\Program File(x86) 在安装路径下,生成如下文件: 使用ICE 创建.ice文

温暖不了你的心的博客 1492

HR效率翻倍!用Dify+飞书AI表格打造自动化简历处理流水线(附完整代码)

本文详细介绍了如何利用Dify工作流和飞书多维表格构建自动化简历处理系统,实现简历上传、AI智能解析与结构化数据入库的全流程自动化。通过整合大语言模型进行信息抽取,该系统能显著提升HR处理简历的效率与准确性,将HR从重复劳动中解放出来。

1a2s3d4f5g的博客 1028

ADS许可证配置全攻略:从破解文件放置到环境变量设置(实测有效版)

本文详细介绍了ADS许可证配置的全流程,包括环境准备、全新安装、破解文件部署和环境变量设置等关键步骤。针对常见的安装和授权问题,提供了实测有效的解决方案,帮助工程师快速完成ADS的配置与优化。

websocket5live的博客 381

ice java 开发_开发zeroc ice应用入门(java开发ice应用,python开发ice应用,java与python结合开发ice服务)...

ice作为一种rpc框架,为主流平台设计,包括Windows和Linux,支持广泛的语言,包括C++,Java,C#(和其他.Net的语言,例如Visual Basic),Python,Ruby,PHP和ActionScript。安装ice2.安装程序,本文安装位置E:\Program Files\ZeroC\Ice-3.6.33.配置环境变量计算机->属性->高级系统设置->环...

weixin_31486289的博客 539

Quartus Prime v18.1 standard-QuartusPrimeV18.1标准版安装过程

Quartus Prime v18.1 standard安装破解过程 下载方式1:官网下载: https://fpgasoftware.intel.com/18.1/?edition=standard&platform=windows 下载方式2:可以从我的网盘下载安装包(如果链接未时效的话): 链接:https://pan.baidu.com/s/1bq4_FcNPSflU1zGJv__rvA 提取码:o0in ----------------------------------.

Alonger1988的博客 2万+

ICE java实现服务双向调用

目录 一 前言 二 实现 1、目录结构 2、公共代码 3、java实现 4、spring实现(spring启动ice) 三 项目githttps://github.com/HandsomeMars/springboot-ice-demo 一 前言 1、基于上篇ice简单使用,本篇文章讲讲如何实现客户端与服务端之间双向调用 2、本文列举两种实现: java main方法调用...

Mars 3725

OpenFOAM-多孔介质模型(porous media)

文章目录一、多孔介质(porous media)二、使用步骤1.达西定律2.Darcy-Forchheimer3.OpenFOAM fvOptions4.paraview动画每帧显示时间(Annotate Time)5.参考内容总结 一、多孔介质(porous media) 在流体力学中,流体流经多孔介质是指流体流经多孔介质时的行为方式,如海绵或木材,或使用沙子或其他多孔材料过滤水。 我们将展示如何设置多孔层,并使用OpenFOAM模拟流体通过该介质。 二、使用步骤 1.达西定律 达西定律最初是由达西通.

zq93538196的博客 9939

使用自制的NTC测量模块测试Plecs的热仿真效果

可以测试:您完全可以用这个模型来测试热仿真。NTC 模型是连接电气域和热域的关键桥梁。实现闭环:通过这种方式,您创建了一个高度真实的正反馈闭环系统:负载增加 -> 损耗增加 -> 温度升高 -> NTC 阻值变化 -> 控制电路可能因此调整(如降低频率或电流)-> 损耗变化 -> 温度变化。应用场景:这对于设计过温保护 (OTP) 电路风扇控制系统以及分析热失控条件非常有用。单位:确保热域中使用的单位( Kelvin 或 Celsius )与您的 C-Script 模型输入期望的单位一致。

312

浅述webrtc中的ICE流程

背景 webrtc的提供的音视频解决方面是针对P2P的,在实际的运用的中往往有诸多限制。在很多场景中会有一个webrtc接入服务来实现对web的接入,实现与具体的音视频业务的转换。 web 互通的基本流程 上图是web对通的基本流程,图中描述的是两个web进行点对点互通。涉及到角色有信令服务,STUN,TURN服务。STUN/TURN+NAT穿越流程即代表了ICE流程 webrtc接入服务 web与接入服务的互通,跟上图的流程差别不大。只是web与接入服务在ICE中所扮演的角色不同,本篇文章将介绍ICE的基

mo4776的博客 4727

深度学习-176-知识图谱技术之langchain与neo4j的嵌入向量Neo4jVector

使用Neo4jVector将输入的文档向量化,并创建向量索引,然后进行语义检索。

qq_20466211的博客 440

ICE简介

一、ICE简介 1、ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够以最小的代价构建分布式应用程序。ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、...

深之JohnChen的专栏 8807

激光除草技术原理与应用全解析

激光除草技术通过光热、光化学等效应精准破坏杂草组织,核心参数包括功率(20-6000W)、波长(400nm-10.6μm)和脉冲宽度。主要应用于大田作物(如玉米、棉花)、经济作物(烟草、果树)及城市绿化,具有环保(无化学污染)、高效(识别率≥95%)和非接触等优势,但存在设备成本高(20-50万元)、技术门槛高等局限。当前技术融合AI识别、多光谱协同等创新,国产设备如华工智耘已实现95.3%识别精度。虽短期投入较高,但长期可降低30%除草成本,并带来环境效益(每亩减排1.2吨CO₂)

start_up_go的博客 557

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ADZS-ICE-2000和AD-ICE2000的使用详细说明(CCES)

ADZS-ICE-2000这个最高端的ADI DSP仿真器,是怎么使用的,请见本文。

ADI_OP的博客 3061

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

webrtc中的ICE流程

webrtc中的ICE流程

m0_60259116的博客 1963

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【ICE】ICE协议看明白

这个文件描述了以UDP为基础的请求/回答模式的多媒体会话的NAT穿越的协议。这个协议名叫ICE。ICE利用了STUN协议和它的扩展版本TURN。ICE可以被任何请求/问答模式的协议利用。例如sip。 1. 简介 RFC 3264 定义了一个双向会话描述协议(SDP),以建立多媒体回话。这种请求/回答模式被sip利用。        请求/回答的协议很难穿越NAT。因为它们想要建立

九头鹰 6457

六、ICE服务——ice环境搭建

ice环境搭建

tj的博客 3151

【ICE】 ICE通信框架 - hello world

1、安装库:ice安装 2、环境配置:如图所示: 示例代码及运行结果,部分注释已经在代码中给出: //.ice module Demo { interface Printer { void printString(string s); }; }; // //// ICE_client.cpp : 定义控制台应用程序的入口点。...

yaotengjian的博客 2435

ICE浅谈:(一)ICE概览

注:本文内容以RFC 5245文档记载内容为主,中文翻译有不当之处请见谅。 概述 ICE是Interactive Connectivity Establishment的简称,一般的定义是: ICE = STUN + TURN + 协商机制 +协商路径 实时音视频通信的场景中,会话双方可能都在NAT网络后面,直接协商的网络接口地址可能无法直接通信。ICE的目的是发现何种候选地址配对可以工作。 基本的ICE工作理念是:针对传输协议(这里重点讨论UDP协议)每个agent都有各种候选地址(绑

5D金豆豆的博客 3269

WebRTC 之ICE浅谈

前言 ICE全称Interactive Connectivity Establishment:交互式连通建立方式。 ICE参照RFC5245建议实现,是一组基于offer/answer模式解决NAT穿越的协议集合。 它综合利用现有的STUN,TURN等协议,以更有效的方式来建立会话。 客户端侧无需关心所处网络的位置以及NAT类型,并且能够动态的发现最优的传输路径。 Classic STUN...

netease_im的博客 3698

ICE详解

1. ICE的一些背景 ICE(the Internet Communications Engine,因特网通讯引擎),http://www.zeroc.com/ice.html ICE 是ZeroC的主要产品, 是一个object-oriented toolkit,用来帮助我们构建分布式应用程序,使我们专注于程序的逻辑而不是底程网络交互的细节 ice提供了强大的 RPC(remote ...

顺其自然~专栏 3038
上一篇: 31个免费的jQuery相册相关插件及实例
下一篇: Java容器类的关系图
java_ganbin
博客等级 码龄16年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值