客户端与服务器双方的语言使用:client(C++), server(Java)。
首先下载好ice安装包,这里使用Ice-3.3.1-VC60版本。安装后配置环境变量以及VC6.0中目录里相关设置(execute, lib, include)。
接下来编写slice文件,后缀名为.ice
//Printer.ice
module Demo {
interface Printer {
void printString(string s);
};
};
打开命令行,转到Printer.ice所在目录,输入slice2cpp Printer.ice命令进行编译。提示如下错误:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
查找错误,还以为是变量没配好,最后发现文件路径里不能有中文。放到别的目录下,编译成功,生成Printer.c文件和Printer.cpp文件。
编写客户端文件client.cpp
//client.cpp
#include <Ice/Ice.h>
#include "Printer.h"
using namespace Demo;
int main(int argc, char * argv[]) {
// Initialize Ice
Ice::CommunicatorPtr c = Ice::initialize(argc, argv);
// Get proxy for the object with the identity “SimplePrinter”
// The server is running on host 127.0.0.1, port 10000
Ice::ObjectPrx base = c->stringToProxy("SimplePrinter:default -p 10000");
// Down-cast base proxy to Printer proxy (like dynamic_cast<>)
PrinterPrx printer = PrinterPrx::checkedCast(base);
// Send “Hello World” to the server
printer->printString("Hello World!");
// Cleanup
c->destroy();
return 0;
}
建立一个windows console工程,把client.cpp, Printer.cpp, Printer.h加进去编译,会报一系列错误。如下:
1. fatal error C1189: #error : "Only multi-threaded DLL libraries can be used with Ice!"
解决方法:工程 -> 设置 -> C/C++ -> Code generation -> 运行库设为Multithreaded DLL。
2. 一大堆错误
解决方法:工程 -> 设置 -> 链接 -> 加入这两个库iced.lib iceutild.lib。
3. 一定要把ice文件中的module,这里作命名空间引入using namespace Demo。
最后编译成功。
编写服务器端文件Server.java
这里需要用命令行的slice2java命令编译先前的Printer.ice文件。但在Ice VC60安装目录的bin中找不到这个命令。又安装了个Ice VC90版的,里面有此命令。而且lib里有需要的Ice.jar文件。
编译:slice2java Printer.ice。生成了Demo目录。里面文件如下:
Printer.java
PrinterHolder.java
PrinterPrx.java
PrinterPrxHelper.java
PrinterPrxHolder.java
_PrinterDel.java
_PrinterDelD.java
_PrinterDelM.java
_PrinterDisp.java
_PrinterOperations.java
_PrinterOperationsNC.java
首先写一个继承类Printer1.java,这个类重写printString方法实现主要的功能,其他在Server.java里面都是一些固定的写法。主要内容在这里。
// Printer1.java
// Implementation of the Printer interface,
// by extending the generated printer skeleton
public class Printer1 extends Demo._PrinterDisp {
// Implementation of printString simply
// prints the message on standard output
public void printString(String s, Ice.Current current) {
System.out.println(s); //主要功能
}
}
再写Server.java
// Server.java
public class Server
{
public static void main(String[] args)
{
// Initialize Ice
Ice.Communicator c = Ice.Util.initialize(args);
// Create an object adapter, which listens on port 10000, using TCP/IP
Ice.ObjectAdapter adapter = c.createObjectAdapterWithEndpoints(
"SimplePrinterAdapter", "tcp -p 10000");
// Create servant (implementation) object
Ice.Object object = new Printer1();
// Add servant to the object adapter’s active servant map
adapter.add(object, Ice.Util.stringToIdentity("SimplePrinter"));
// Activate the object adapter
adapter.activate();
// Just wait until we’re finished
c.waitForShutdown();
}
}
至此,程序基本完成。运行Server.java,服务器开始在10000端口监听。运行client.exe,服务器端即收到了客户端发来的久违的Hello World。
最后因为项目要用到C#,再用C#写个server,与Java类似。引用Ice.dll后,在程序里using Ice。就可以编写程序了。
当然,先要用slice2cs Printer.ice生成Printer.cs类文件。
Printer1.cs
using System;
public class Printer1 : Demo.PrinterDisp_ {
public override void printString(String s, Ice.Current current) {
Console.WriteLine(s);
}
}
Server.cs
using System;
using Ice;
public class Server
{
static void Main(string[] args)
{
int status = 0;
Ice.Communicator ic = null;
try
{
ic = Ice.Util.initialize(ref args);
Ice.ObjectAdapter adapter
= ic.createObjectAdapterWithEndpoints(
"SimplePrinterAdapter", "default -p 10000");
Ice.Object obj = new Printer1();
adapter.add(
obj,
Ice.Util.stringToIdentity("SimplePrinter"));
adapter.activate();
ic.waitForShutdown();
}
catch (System.Exception e)
{
Console.Error.WriteLine(e);
status = 1;
}
finally
{
if (ic != null)
ic.destroy();
}
Environment.Exit(status);
}
}
结束。
分享到:
相关推荐
随后,文档通过一个简单的HelloWorld应用示例,展示了如何编写Slice定义,并通过C++和Java编写ICE应用程序。 _slice语言_是ICE的核心部分,文档详细介绍了Slice语言的编译过程、源文件结构、词法规则等。Slice语言...
1. **多语言支持**:ICE支持多种编程语言,如C++, Java, Python等,使得不同语言间的交互变得容易。 2. **二进制协议**:ICE使用高效的二进制协议进行通信,提高了数据传输速度和网络性能。 3. **接口定义语言...
Ice中间件,java c++ ,开发框架
《ICE HelloWorld程序详解》 ICE(Internet Communications Engine)是由ZeroC公司开发的一种分布式对象中间件,它提供了一种高效、灵活、易于使用的跨平台通信框架,适用于构建大规模的分布式应用程序。"ICE Hello...
写ICE程序的客户端,而服务器端一般利用C++或者JAVA 来实现). • 提供一组完整的特性,支持广泛的领域中的实际的分布式应用的开发。 • 避免不必要的复杂性,使平台更易于学习和使用。 ICE的学习比较曲线比较短,很...
JAVA版本的HelloWorld程序与C++类似,先定义`HelloWorld.ice`接口。 5.2 **生成框架代码** 使用slice2java工具,将Slice定义转换为Java的接口和类。 5.3 **实现服务端** 在Java中,实现`HelloWorld::Hello`接口,...
【描述】中提到的“ice的客户端c++程序代码,有一定价值”,暗示了这个压缩包内含有的是用C++编写的ICE客户端应用的源码。这样的代码通常包含连接到ICE服务器、发送和接收消息以及处理各种交互的逻辑。具有价值可能...
Ice 是一种面向对象的中间件平台。从根本上说,这意味着Ice 为构建面 向对象的客户-服务器应用提供了工具、API 和库支持。Ice 应用适合在异 种环境中使用:客户和服务器可以... 本例子是用java写的ice实现的HelloWorld
### HelloWorld_ICE分布式应用开发入门 #### 概述 本文旨在通过一个简单的示例来介绍如何使用ICE(Internet Communications Engine)进行分布式应用开发。ICE是一种强大的中间件框架,用于构建可扩展、健壮且高...
在电力自动化领域,ICE104规约是一种广泛使用的通信协议,主要用于远程终端单元(RTU)和主站之间的数据交换。ICE104规约是IEC60870-5-104标准的简称,它规定了如何在以太网环境下进行远动通信,包括遥测、遥信、...
《Ice分布式程序设计》中文PDF版是一本专为C++开发者设计的指南,它详细介绍了如何使用ZERO-ICE框架进行分布式编程。ZERO-ICE是一个强大的、面向对象的、基于组件的中间件,它允许程序员在多种语言之间创建无缝的、...
总的来说,"01-android 4.0 入门配置以及HelloWorld程序讲解"涵盖了Android开发的基本流程,包括环境配置、项目创建、代码编写和运行。通过这个起点,你可以逐渐深入学习Android的UI设计、事件处理、网络编程、...
ZeroC ICE C#客户端 C++服务端 参数中包含有中文的string出错的解决方法 现象: 使用ICE做开发,C++的服务端,C#的客户端,如果返回的string参数中包含有中文,则C#客户端会抛异常。
在本文中,我们将深入探讨ICE (Internet Communications Engine) 3.7.3版本的安装以及如何在C#环境中集成和使用ICE库。ICE是一个跨平台的中间件,它提供了高性能的分布式计算解决方案,用于构建并发、实时和安全的...
作者提供了编写HelloWorld应用的步骤,包括如何编写Slice定义以及如何使用C++和Java语言编写ICE应用程序。 在第二部分中,书籍详细介绍了Slice语言。Slice是ICE所使用的接口定义语言,它允许开发者定义分布式对象的...
在C#中使用ICE,开发者可以利用.NET Framework的强大功能,同时享受到ICE带来的分布式系统开发便利。ICE为C#提供了丰富的API,包括数据类型序列化、对象代理、多线程处理等,使得C#程序员可以方便地创建跨平台的ICE...
【描述】"这是用java开发的ice的helloworld" 暗示了这个压缩包的核心内容是一个Java项目,该项目展示了如何使用Ice库来实现一个基础的“Hello, World!”服务。在Java中,"Hello, World!"程序通常涉及创建一个类,该...
- **C++绑定**:ICE为C++提供了丰富的API,开发者可以用C++编写服务器和客户端程序,利用ICE的特性进行网络通信。 - **编译和链接**:使用ICE的编译器工具,如`icecpp`,将接口定义编译为C++代码,并将其链接到...