- 浏览: 661201 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sztime:
可以在文本框上绑定事件来禁用回车键, 我就是这样做的.在IE中 ...
form 回车自动提交问题 -
damoqiongqiu:
非常好的文章,很透彻不过有一句话小僧腆着脸补充一下:“1111 ...
为什么要用补码来做存储 -
wuyizhong:
原来如此啊。
form 回车自动提交问题 -
luliangy:
谢楼主~!
用C语言扩展Python的功能 -
kwong:
很有用,谢谢
火狐和IE 对css 样式解释的差异
按照某人的说法:跨平台的C++网络编程ICE才是王道。于是,我学习ICE。
ICE才出来两年,是“一种现代的面向对象中间件,可用于替代像CORBA或COM/DCOM/COM+这样的中间件。在易于学习的同时,它为各种 有着苛刻的技术要求的应用提供了强大的网络基础设施。”Ice 3.0 已实现对C++, Java, Python, PHP, C# 及 Visual Basic 的支持。
这里我就不多说了,大家可以参考这篇文章:《反叛之冰:Internet Communications Engine 》。大家可以下载的ICE的官方参考手册,有中文版,不过是1.3.0版, 英文的是3.0版。
ICE是开源的,大家可以从源代码开始编译,不过较复杂,幸好有binary版本,比如我就是下载的VS2003.NET的安装包。安装完成之后按 照安装目录下的Readme对IDE进行一下配置,比如VC7.1就是把ice的include加入VC7.1的引用文件目录,把ice的lib目录加入 VC7.1的库文件目录。然后再把安装目录下的bin文件夹添加到系统的环境变量Path中,最后,把bin文件夹下的所有DLL文件都Copy到 Windows安装目录下的System32文件夹下(win98下是System文件夹?)。
ICE自定义了一种SLICE语言,目的是定义接口,作用主要应该是保持对象调用或者数据传输时的语言无关性。
开发一个ICE应用程序可以分为三步:
-
写一个Slice定义, 并且编译它
-
写服务端, 并编译它
-
写客户端, 并编译它
OK,写一个小程序,实现客户发送要打印的文本给服务器,再由服务器把文本发给打印机(这里我们用屏幕显示替代),这里对代码解读请见下一章,这里不多说。
-
写一个Slice定义, 并且编译它:
文件Printer.ice.
module Demo { interface Printer { void printString(string s); }; };
这个文件很简单, 但需要注意, 在区分大小写的系统上, 扩展名一定是小写.
编译也很简单,首先确认你已将你的bin目录加到系统的环境变量Path中.然后把上面这个片断保存成Printer.ice, 最后执行slice2cpp Printer.ice, 执行后的结果应该是自动生成了printer.h和printer.cpp.
-
写服务端, 并编译它
文件server.cpp.
#include <Ice/Ice.h> #include "../print.h" using namespace std; using namespace Demo; class PrinterI : public Printer { public: virtual void printString(const string& s,const Ice::Current&); }; void PrinterI::printString(const string& s, const Ice::Current&) { cout << s << endl; } int main(int argc, char* argv[]) { int status = 0; Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc, argv); Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints( "SimplePrinterAdapter", "default -p 10000"); Ice::ObjectPtr object = new PrinterI; adapter->add(object, Ice::stringToIdentity("SimplePrinter")); adapter->activate(); ic->waitForShutdown(); } catch (const Ice::Exception& e) { cerr << e << endl; status = 1; } catch (const char* msg) { cerr << msg << endl; status = 1; } if (ic) { try { ic->destroy(); } catch (const Ice::Exception& e) { cerr << e << endl; status = 1; } } return status; }
以VS2003的配置为例
-
把ice的include加入VC7.1的引用文件目录,把ice的lib目录加入VC7.1的库文件目录。然后再把安装目录下的bin文件夹添加 到系统的环境变量Path中,最后,把bin文件夹下的所有DLL文件都Copy到Windows安装目录下的System32文件夹下(win98下是 System文件夹?)(当然,DLL文件的问题也可以通过修改环境变量来解决,不过是那个变量呢?Who can tell me?)
-
新建一个C++的Win32的命令台控制程序,并且设置为空项目, 把server.cpp, printer.cpp和printer.h加入这个项目(printer.cpp和printer.h放在项目的目录的外一层目录)
-
项目-》属性-》C/C++ -》代码生成-》运行时库-》/MD(realse版)或/MDd(debug版)
项目-》配置属性-》C/C++-》语言-》启用运行时类型信息/GR 开启
设置:项目-》属性-》链接器-》输入-》加入iced.lib iceutild.lib,此处一定要把realse库和debug库分清, debug库后有个d
-
修改printer.cpp中的#include <printer.h>为#include "printer.h"
-
OK,编译
-
-
写客户端,并编译它
文件client.cpp.
#include <Ice/Ice.h> #include "..\print.h" using namespace std; using namespace Demo; int main(int argc, char* argv[]) { int status = 0; Ice::CommunicatorPtr ic; try { ic = Ice::initialize(argc, argv); Ice::ObjectPrx base = ic->stringToProxy( "SimplePrinter:default -p 10000"); PrinterPrx printer = PrinterPrx::checkedCast(base); if (!printer) throw "Invalid proxy"; printer->printString("Hello World!"); } catch (const Ice::Exception& ex) { cerr << ex << endl; status = 1; } catch (const char* msg) { cerr << msg << endl; status = 1; } if (ic) ic->destroy(); return status; }
添加一个新项目到当前解决方案,按照上面的方法,对client再一次进行设置。
在解决方案管理器的解决方案上点击右键,选择批生成Debug版本,然到用资源管理器到两个解决方案的目录下的Debug文件夹中执行生产的可执行 文件。先运行server.exe, 然后运行client.exe, 哈哈, 是不是在server.exe的窗口里出现了Hello World!(运行一次client.exe,出现一条)
发表评论
-
strlcpy 的历史
2012-11-05 18:51 700strlcpy 并不属于 ANSI C,至今也还不是标准 ... -
c中的移位操作
2012-04-12 18:18 981位移位运算符是将数据看成二进制数,对其进行向左或向 ... -
为什么要用补码来做存储
2012-04-12 18:02 2230看了些补码的知识,摘抄了些,自己整理了些。 顺便带着两个 ... -
google test 使用
2009-01-03 13:59 3551安装: 下载Google C++ Testi ... -
string 的 data() 和c_str()
2008-12-24 01:17 1244data 是字符数组,里面有 '\0 '当然也不会 ... -
C/C++ unit testing tools (18 found)
2008-12-19 01:27 1976C/C++ unit testing tools (18 f ... -
climits中的符号常量
2008-12-10 11:43 1148climits中的符号常量 符号常量 ... -
对 pthread_cond_wait 的错误理解
2008-08-28 15:52 2095在线程的调度中经常会用到 pthread_cond_wait ... -
环形缓冲
2008-08-27 17:20 956/** * Copyright (c) 2008, ×××研 ... -
Linux下C语言编程的 RPC远程调用编程
2008-07-17 15:38 3414在查看libc6-dev软件包提供的工具(用 dpkg -L ... -
C++中重载操作符时什么时候定义成友元,什么时候定义为成员方法
2008-07-10 18:05 3545在C++语言中,可以用关键字operator加上运算符来表示函 ... -
c++中的存储类型
2008-07-06 00:46 1921存储类型是从变量的存 ... -
libevent 一个time server
2008-05-19 11:20 1302#include <netinet/in.h> # ... -
自己动手改写komodo sourcetree插件 对C/C++的支持
2008-04-16 22:11 1396其实很简单了, 找到sourcetree.js 的 ... -
GNU C的 __attribute__ 机制
2008-04-15 15:34 772GNU C 的一大特色(却不被初学者所知)就是 __attri ... -
module的认识和写法
2008-04-15 15:29 718不知道在什幺时候,Linux 出现了 module 这种东西, ... -
dynamic_cast、static_cast、const_cast 和 reinterp
2008-04-10 15:16 1385dynamic_cast、static_cast、co ... -
static_cast、dynamic_cast、reinterpret_cast、和const_c
2008-04-10 15:14 6237static_cast、dynamic_cast、reinte ... -
关于Linux下C/C++程序编译
2007-08-23 18:15 3683在编译之前我们需要 ... -
使用 setfill、setw 和 setprecision 基数的示例
2007-08-23 19:00 2727使用 setfill、setw 和 setprecision ...
相关推荐
ICE 3.7.3 安装包是专为Windows操作系统设计的一款软件更新包,它提供了从3.7.0到3.7.3的版本升级路径。...无论是初次安装还是进行版本升级,这个压缩包都提供了所有必要的资源,使得ICE的使用更加方便高效。
6. **安装指南**:对于初次接触ICE的开发者,安装指南是必不可少的。它会指导用户如何配置环境、编译源码以及安装ICE到目标系统。 7. **许可协议**:ICE遵循特定的开源许可协议,如Apache 2.0或GPL,压缩包中会包含...
总的来说,"ICE 示例代码"是学习和精通 ICE 中间件的宝贵资源,无论你是初次接触还是已有经验的开发者,都能从中受益,提升你在分布式系统开发中的技能。通过深入研究这些示例,你将能够更好地理解和运用 ICE 的核心...
ICE(Internet Communication Engine)是一种高性能、安全的分布式计算框架,用于构建跨语言、跨平台的分布式应用程序。...无论是初次接触还是经验丰富的开发者,这些资源都将提供宝贵的参考和学习材料。
[removed][removed]冰箱 Ice Box 教程大全初次使用?如果您的设备已经 Root,则可以直接打开使用,如果没有 Root,请参考选择教程:有电脑?使用 (强烈推荐)或没有电脑?使用 (需清手机数据,不推荐)遇到问题?...
9. **用户友好**:界面直观,操作简单,即便是初次接触PDF编辑的用户也能快速上手,降低了学习曲线。 10. **版本更新**:v2.44是软件的一个特定版本,可能包含了之前版本的改进和新功能,例如性能优化、错误修复...
《PJBlog3 ice.v2模板详解》 ...无论是初次接触博客系统的新人,还是寻求个性化设计的资深博主,都可以在ice.v2模板中找到满意的解决方案。通过深入了解和灵活运用,我们可以打造出一个既美观又实用的个人网络空间。
这个命名暗示了它可能是一个与人际交往、约会或社交相关的应用程序,"Ice2MeetU"可能是指“冰冻的初次相遇”,意味着打破初次见面的尴尬,帮助人们相互认识。 【描述】中的“#Ice2MeetUApp_Back”可能是一个项目...
在压缩包中的"下载说明.htm"文件,通常包含了关于如何下载、安装和使用IceSword-v1.22的详细步骤,对于初次接触这款工具的用户来说,是必不可少的参考指南。而"IceSword122en"文件则很可能是IceSword-v1.22的英文...
Gacha Simulator 明日方舟干员寻访模拟器 - A gacha simulator of Arknights. 项目进度 - 40% 开发需求 [已完成]寻访算法 ...预览地址(初次打开需加载资源,可能耗时较长) (推荐) (国内打开较慢)
- 启动程序:包括初次启动前的检查、电源接通后的操作步骤,以及如何进行试运行。 - 操作程序:详述制冰机的日常操作,如设定、调整和监控制冰过程。 5. 控制面板和LED指示程序: - 控制面板的功能和操作:介绍...
1. Northeast Camping Show:这个活动是针对想要购买或更新露营设备的家庭,特别是对初次露营或者希望探索新的露营冒险的家庭。活动在康涅狄格会议中心举行,由康涅狄格露营地业主协会的代表指导,旨在教给参与者...
- "Nice to meet you." 是初次见面的问候,回答 "E. Nice to meet you." 回应对方的问候。 2. 摸摸你的鼻子:A. Touch your nose. 正确翻译为摸摸你的鼻子,与题目相符。 3. 这是我的耳朵:B. This is my ear. 是...
2. "百度桌面(ipv6版本) By Ice sWord.exe":这是百度桌面的IPv6版本的安装程序,由Ice sWord制作。通常,.exe文件是可执行程序,用户可以通过双击这个文件来安装百度桌面的ipv6版本。 3. "使用说明.txt":这是一个...
个人防火墙产品如著名Symant ec公司的诺顿、Network Ice公司的BlackIce Defender、McAfee公司的思科及Zone Lab的 free ZoneAlarm 等,都能帮助用户的系统进行监控及管理,防止特洛伊木马、spy-ware 等病毒程序通过...
本文档旨在为初次接触Ansys Maxwell软件的新手提供一份简单易懂的操作指南。Maxwell是一款功能强大的电磁场仿真软件,广泛应用于电机、变压器和其他电磁设备的设计与分析。本文将以一个具体的例子为基础,详细介绍...
1. 英语交际用语:在这些题目中,我们看到了日常英语交际中的常见表达,如自我介绍(This is my friend, Helen.)、请求别人看某物(Look at my new skirt.)、赞美(It’s nice.)以及初次见面的问候(Nice to meet...
4. 礼貌用语:初次见面说"Nice to meet you.",拒绝对方的提议时说"No, thanks.",收到礼物或祝福时说"Thank you.",新年祝福用"Happy New Year!"。 5. 特殊语境表达:如生日祝福"Happy birthday!",接受礼物时的...