廢話不多說,最簡單的源碼比較一下是最快的方法.
1、slice文件 Demo.ice
#ifndef HELLO_ICE
#define HELLO_ICE
module Demo {
interface Printer {
["ami"] string printString(string s); //["ami"] 頭表示此方法是異步的,客戶端無需等待立即返回;
};
};
#endif
2、slice2java 生成骨架代碼
3、接口實現:PrinterI.java
import Ice.*;
import Demo.*;
public class PrinterI extends _PrinterDisp{
public String printString(String s, Current __current) {
// TODO Auto-generated method stub
StringBuilder sb=new StringBuilder(s);
s = sb.reverse().toString(); //反轉字符串
return s;
}
}
4、異步回調實現:APP.java
import Demo.*;
public class APP extends AMI_Printer_printString
{
public void ice_response(String __ret){
System.out.println("printString完成~"+__ret);
}
public void ice_exception(Ice.LocalException ex){
System.out.println(ex.toString()+"出錯啦~");
}
}
5、服務端 Server.java
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("simplePrinterAdapter", "default -h 10.147.6.85 -p 10000");// 創造對象適配器
Ice.Object objcet = new PrinterI();// 創建servant對象
adapter.add(objcet, Ice.Util.stringToIdentity("simplePrinter"));// 適配器添加一個新的servant,給servant對象取個名字
adapter.activate();
System.out.println("connection success");
ic.waitForShutdown();
} catch (Ice.LocalException e) {
e.printStackTrace();
status = 1;
} catch (Exception e) {
System.err.print(e.getMessage());
status = 1;
} finally {
if (ic != null) {
ic.destroy();
}
}
System.exit(status);
}
}
6、客戶端:Client.java
import java.util.*;
import Demo.*;
public class Client {
/**
* @param args
*/
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:default -h 10.147.6.85 -p 10000" + "");
PrinterPrx printer = PrinterPrxHelper.checkedCast(base);
if (printer == null) {
System.out.println("invalid proxy");
}
String out = printer.printString("I love you");//同步調用
System.out.println(out);
//printer.printString_async(new APP(), "Hello World!");//異步調用,基本上總是在下面的打印輸出'做點其他事情~'後輸出
System.out.println("做點其他事情~");
//Scanner input = new Scanner(System.in);
//String str = input.next();
} catch (Ice.LocalException e) {
// TODO: handle exception
e.printStackTrace();
status = 1;
} catch (Exception e) {
System.err.print(e.getMessage());
status = 1;
} finally {
if (ic != null) {
ic.destroy();
}
}
System.exit(status);
}
}