java ice 连接服务器_ICE实现服务器客户端

java ice 连接服务器_ICE实现服务器客户端本文将结合实际项目,做一个基于ice的实际项目实例应用,该实例完成客户端调用服务端接口完成消息发送,计算的功能。1,创建java项目ICEServer,导入ice.jar.2,在项目下创建slice文件夹,编写model.ice,service.ice,service2.ice文件,其内容如下model.ice#ifndef_MODEL#define_MODELmodulecom{modul…

大家好,又见面了,我是你们的朋友全栈君。

本文将结合实际项目,做一个基于ice的实际项目实例应用,该实例完成客户端调用服务端接口完成消息发送,计算的功能。1,创建java项目ICEServer,导入ice.jar.

2,在项目下创建slice文件夹,编写model.ice,service.ice,service2.ice文件,其内容如下

model.ice

#ifndef _MODEL

#define _MODEL

module com

{

module alan

{

module generated

{

module model

{

/**定义整型数组**/

sequence IntegerArray;

/**自定义Map类型**/

dictionary CustomMap;

/**消息类型**/

enum MessageType {ERROR,INFO,WARNING};

/**计算操作类型**/

enum CalcType {Adds,Subtract,Multiply,Divide};

/**消息的操作类型**/

enum ActionType {Add,Remove,Stop,Start,Pause};

/** 消息结构 **/

[“java:getset”]

struct Message {

/**消息类型**/

MessageType type;

/**消息类型**/

ActionType action;

/**相关id**/

IntegerArray relatedIds;

/**扩展属性**/

CustomMap extention;

};

};

};

};

};

#endif

service.ice

#ifndef _GENERATED

#define _GENERATED

#include

module com

{

module alan

{

module generated

{

interface MessageServiceIce

{

/**

* 向ice服务发送信息

* @param message 消息内容

* @return true 成功 false 失败

*/

string sendMessage(model::Message msg);

};

};

};

};

#endif

service2.ice

#ifndef _GENERATED

#define _GENERATED

#include

module com

{

module alan

{

module generated

{

interface CalcServiceIce

{

/**

* 服务端计算方法

* @param d1 计算数1

* @param d2 计算数2

* @param type 计算方式

* @return true 成功 false 失败

*/

double calc(double d1, double d2, model::CalcType cal);

};

};

};

};

#endif

3.dos环境下执行

cd E:\workspace\ICEService\slice

E:\Ice-3.3.0\bin\slice2java -I. –output-dir=../src *.ice //生产代码

E:\Ice-3.3.0\bin\slice2html -I. –output-dir=doc *.ice//生产doc文档,可以忽略

将生产generated包下代码以jar包方式导出icetest.jar,并在项目中建立lib目录放入其中(把ice.jar也放入lib下,以备后用),可以删除其生产代码,以jar方式调用其代码。4,编写发布接口实现代码和服务器端代码CalcServiceIceImpl .java实现数学计算:

public class CalcServiceIceImpl extends _CalcServiceIceDisp {

public double calc(double num1, double num2, CalcType type,

Current arg3) {

double re = 0.0d;

switch (type) {

case Adds:

re = num1 + num2;

break;

case Subtract:

re = num1 – num2;

break;

case Multiply:

re = num1 * num2;

break;

case Divide:

re = num1 / num2;

break;

default:

break;

}

return re;

}

}

MessageServiceIceImpl .java实现发送消息

public class MessageServiceIceImpl extends _MessageServiceIceDisp {

public String sendMessage(Message msg, Current __current) {

String str = msg.getType() +” “+ msg.getAction()+” ” + Arrays.toString(msg.getRelatedIds());

return str;

}

}

IceService .java实现服务器端接口注册:

public class IceService {

public static void main(String[] args){

int status = 0;

Communicator ic = null;

try{

ic = Ice.Util.initialize(args);

Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(“testAdapter”, “default -h *”);

ObjectImpl object1 = new MessageServiceIceImpl();

ObjectImpl object2 = new CalcServiceIceImpl();

adapter.add(object1, ic.stringToIdentity(“messageService”));

adapter.add(object2, ic.stringToIdentity(“calcService”));

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) {

try {

ic.destroy();

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

5,发布接口

在项目下创建deploy文件夹,在其下创建config-ice.grid配置文件

IceGrid.InstanceName=IceTestServiceGrid

#

# The IceGrid locator proxy.

#

Ice.Default.Locator=IceTestServiceGrid/Locator:tcp -p 10000

#

# IceGrid registry configuration.

#

IceGrid.Registry.Client.Endpoints=tcp -p 10000

IceGrid.Registry.Server.Endpoints=tcp

IceGrid.Registry.Internal.Endpoints=tcp

IceGrid.Registry.Data=db/rescenter_registry

IceGrid.Registry.PermissionsVerifier=IceTestServiceGrid/NullPermissionsVerifier

IceGrid.Registry.AdminPermissionsVerifier=IceTestServiceGrid/NullPermissionsVerifier

IceGrid.Registry.SSLPermissionsVerifier=IceTestServiceGrid/NullSSLPermissionsVerifier

IceGrid.Registry.AdminSSLPermissionsVerifier=IceTestServiceGrid/NullSSLPermissionsVerifier

#

# Dummy username and password for icegridadmin.

#

IceGridAdmin.Username=foo

IceGridAdmin.Password=bar

#set server active Connection Managerment

Ice.ACM.Server=60

#

# IceGrid node configuration.

#

IceGrid.Node.Name=node1

IceGrid.Node.Endpoints=tcp

IceGrid.Node.Data=db/node1

IceGrid.Node.CollocateRegistry=1

IceGrid.Node.Trace.Activator=1

IceGrid.Node.Trace.Adapter=2

IceGrid.Node.Trace.Server=3

根据需要在当前目录下创建db/node1,db/rescenter_registry文件夹

创建application.xml文件

-classpath

E:\workspace\ICEServer\bin

-Djava.ext.dirs=E:\workspace\ICEServer\lib

-server

com.alan.ice.IceService

创建start_server.bat

path=%path%;E:\Ice-3.3.0\bin

icegridnode –Ice.Config=config-ice.grid –deploy application.xml

pause

创建完成后就可以双击start_server.bat来启动服务了

6,创建客户端调用项目ICEClient,导入ice.jar以及前面生产的icetest.jar,在项目下创建IceClient .java

public class IceClient {

public static void main(String[] args){

int status = 0;

Communicator ic = null;

try{

String str = String.format(“%s:%s -h %s -p %s”, “IceTestServiceGrid/Locator”,”tcp” ,”localhost”, “10000”);

InitializationData localInitializationData = new InitializationData();

localInitializationData.properties = Util.createProperties();

localInitializationData.properties.setProperty(“Ice.Default.Locator”, str);

ic = Util.initialize(localInitializationData);

MessageServiceIcePrx messageclient = MessageServiceIcePrxHelper.checkedCast(ic.stringToProxy(“messageService”));

CalcServiceIcePrx calcclient = CalcServiceIcePrxHelper.checkedCast(ic.stringToProxy(“calcService”));

if (messageclient == null || calcclient == null )

throw new Error(“Invalid proxy”);

Map map = new HashMap();

Message msg = new Message(MessageType.INFO, ActionType.Add,new int[]{1},map);

System.out.println(messageclient.sendMessage(msg));//调用接口完成消息发送

System.out.println(calcclient.calc(12, 4, CalcType.Adds));//调用接口完成数学计算

} catch (Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if (ic != null) {

try {

ic.destroy();

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

7,执行IceClient ,控制台输出

INFO Add [1]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131430.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 查看服务器的外网IP

    查看服务器的外网IP查看服务器的外网IP1、curlcip.cc[test@rabbitmq02~]$curlcip.ccIP :220.168.33.22地址 :中国湖南长沙运营商 :电信数据二 :湖南省长沙市|电信数据三 :URL :http://www.cip.cc/220.168.33.222、curlmyip.ipip.net[test@rabbitmq02~]$curlmyip.ipip.net当前IP:220.168.33.22来自于:中

    2022年5月13日
    82
  • buildroot 树莓派3B+ WiFi

    buildroot 树莓派3B+ WiFi懂的越多,不懂的就越多。

    2022年6月25日
    31
  • pac模式与全局模式哪个好_ppp模式的优缺点

    pac模式与全局模式哪个好_ppp模式的优缺点众所周知,传统有一大弊端,即:只能使用全局模式,这样情况下,虽然可以加速国外网站,但打开国内网站速度会变慢;加速度不但支持全局模式,同时也支持PAC模式(智能分流,绕过中国大陆),这样情况下,既可以加速国外网站,也不会影响国内网站打开速度!温馨提示:安卓手机客户端、IOS客户端、MAC客户端均可根据自己实际使用需求,自由切换【PAC模式】或者【全局模式】,具体如何切换可查看相应客户端设置教程;…

    2022年10月19日
    0
  • wireshark抓包命令_wireshark ping抓包

    wireshark抓包命令_wireshark ping抓包wireshark抓包常用命令:一、针对IP过滤1)对源地址为192.168.0.1的包的过滤ip.src==192.168.0.12)对目的地址为192.168.0.1的包的过滤ip.dst==192.168.0.13)包括源和目的地址ip.addr==192.168.0.1二、针对协议的过滤1)捕获某些协议的数据包httportelne…

    2022年9月3日
    2
  • onedrive免费扩容15g_onedrive怎样免费扩容

    onedrive免费扩容15g_onedrive怎样免费扩容免费扩容onedrive最高可以免费获得10G,每邀请一个新用户就可以双方共同获得0.5G内存扩容链接:https://onedrive.live.com?invref=2ef0e90fd6f1bed7&invscr=90

    2022年9月10日
    0
  • html下拉框设置默认值_html下拉列表框默认值[通俗易懂]

    html下拉框设置默认值_html下拉列表框默认值[通俗易懂]HTML和JavaScript综合练习题一、单项选择1.Web使用(D)在服务器和客户端之间传输数据。A.FTPB.TelnetC.E-mailD.HTTP2.HTTP服务默认……name的属性值必须要相同,必须有一个value值实现默认选中的属性:checked=”checked”-文件输入项(在后期上传时候用到):-下拉………

    2022年10月31日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号