我用Java编写客户端服务器聊天程序时遇到BAD_PARAM错误。第一个代码段是服务器
//Server.java
try {
ORB orb = ORB.init(args, null);
POA poa = POAHelper.narrow(orb
.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
ServerImpl s = new ServerImpl(port);
System.out.println(port);
org.omg.CORBA.Object obj = poa.servant_to_reference(s);
Server r = ServerHelper.narrow(obj);
// get reference to root naming context
org.omg.CORBA.Object ns = orb
.resolve_initial_references("NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ns);
// bind the Object Reference in Naming
String name = "Chat";
NameComponent path[] = nc.to_name(name);
nc.rebind(path, r);
System.out.println("Waiting for clients ... ");
orb.run();
} catch (Exception e) {
e.printStackTrace();
}
这是我的客户方
//Client.java
try {
ORB orb = ORB.init(args, null);
// get reference to root naming context
org.omg.CORBA.Object ns = orb
.resolve_initial_references("NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ns);
// lookup name
String name = "Chat";
org.omg.CORBA.Object obj = nc.resolve_str(name);
Client c = ClientHelper.narrow(obj);
} catch (Exception e) {
//System.err.println(e.getMessage());
e.printStackTrace();
}
我已经启动了orbd和Server.java。除了客户,一切都很好。错误是org.omg.BAD_PARAM vmcid 0x0次要代码:0已完成:否,它发生在客户端c = ClientHelper.narrow(obj);行。
我已经为这个错误苦苦挣扎了3天。有什么建议可以解决吗?谢谢,我非常感谢您的帮助!
问题是您将Server
对象绑定到服务器代码中的“名称服务”中,但是随后您的客户端代码尝试将其范围缩小为一种Client
类型。这些类型不兼容。
更改您的客户端代码以执行此操作:
Server s = ServerHelper.narrow(obj);
客户端和服务器不需要两个单独的IDL接口。只需创建一个由服务器实现的程序,然后让客户端调用它即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句