java CORBA中的BAD_PARAM

我在Java中编写Client-Server Chat程序时遇到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对象绑定到服务器代码中的Name Service,但随后您的客户端代码尝试将其缩小为Client类型。 这些类型是不兼容的。

更改您的客户端代码来执行此操作:

 Server s = ServerHelper.narrow(obj); 

您不需要为客户端和服务器使用两个单独的IDL接口。 只需创建服务器实现的一个,并让客户端调用它。