0

我在 ICE 中编写了一个 Android 应用程序。但是当我运行应用程序时,“LogCat”打印消息“Ice.ConnectionRefusedException error=0”,我搜索了很长时间,但没有答案。请帮我!非常感谢您。这是两个代码部分。(对不起我的英语不好)

服务器 (C++)

int status = 0;
Ice::CommunicatorPtr ic;
try
{
    ic = Ice::initialize(argc, argv);
    Ice::ObjectAdapterPtr adapter =
        ic->createObjectAdapterWithEndpoints("HelloAdapter", "tcp -p 10000"); 
    Ice::ObjectPtr object = new HelloI();
    adapter->add(object, ic->stringToIdentity("hello"));
    adapter->activate();
    ic->waitForShutdown();
}

客户端(Java)

    public void sethelloPrx(){
    Ice.Communicator ic=null;
    try{
        ic=Ice.Util.initialize();
        Ice.ObjectPrx base=
                ic.stringToProxy("hello:tcp -h 127.0.0.1 -p 10000");
        index = helloPrxHelper.checkedCast(base);
        if(index == null)
            throw new Error("Invalid proxy");
    }catch(Exception e){
        Toast.makeText(MainActivity.this,
                "IceMain 注册失败",
                Toast.LENGTH_SHORT).show();
        Log.e("bmi",e.toString());          
    }       
}
4

1 回答 1

0

在您的客户端中,您已经在代理上写入了服务器的 IP,就像您可以访问服务器的本地主机一样。您必须更改代理上的localhost ip并放置服务器的IP。只需修改这一行:

 Ice.ObjectPrx base = ic.stringToProxy("hello:tcp -h 127.0.0.1 -p 10000");

至:

Ice.ObjectPrx base = ic.stringToProxy("hello:tcp -h <server's IP> -p 10000");

您可以像这样打印服务器的 IP:

ObjectPrx proxy = adapter->add(object, ic->stringToIdentity("hello"));
std::cout << proxy << std::endl;

这样就可以看到服务器的IP了。

小解释:

您的客户端正在尝试在 localhost 上找到服务器。如果我正确理解了您的解释,那么客户端要么在手机上,要么在模拟器上。由于它找不到我认为在 PC 上的服务器。

希望这对您有所帮助。编辑:这个 repo 充满了 ZeroC Ice 示例:https ://bitbucket.org/arco_group/ice-hello

于 2015-05-28T08:19:35.967 回答