1

我使用 JADE 创建代理系统。我创建了两个程序:服务器和客户端。

服务器:

Runtime runtime = Runtime.instance(true);
Profile profile = new ProfileImpl();
jade.wrapper.AgentContainer agentcontainer =
    runtime.createMainContainer(profile);
agentcontainer.createNewAgent(
    "server", "MASServer.CenterAgent", new object[] { this }).start();

服务器的行为:

ACLMessage AclAnswer = new ACLMessage(ACLMessage.INFORM);
AclAnswer.setContent("From server:helllo");
AID recei = new AID("client", AID.ISLOCALNAME);
AclAnswer.addReceiver(recei);
agent.send(AclAnswer);

客户:

Profile profile = new ProfileImpl(false);
profile.setParameter(ProfileImpl.MAIN_HOST, "myhostaddress");
Runtime runtime = Runtime.instance();
jade.wrapper.AgentContainer secondaryContainer =
     runtime.createAgentContainer(profile);
secondaryContainer.createNewAgent(
    "client", "MASClient.CenterAgent", new object[] { this }).start();

客户行为:

ACLMessage AclAnswer = new ACLMessage(ACLMessage.INFORM);
AclAnswer.setContent("From client:helllo");
AID recei = new AID("server", AID.ISLOCALNAME);
AclAnswer.addReceiver(recei);
agent.send(AclAnswer);

当服务器和客户端程序在同一台计算机上运行时,它工作正常。

当服务器运行在计算机 A 上,客户端运行在计算机 B 上时,客户端可以向服务器发送 ACLMessage,但服务器不能向客户端发送 ACLMessage。我该如何解决这个问题?

4

2 回答 2

1

服务器代理是否在等待客户端代理的容器加入平台后才发送消息?您的代码显示服务器将发送消息,但不会发送消息

如果服务器一启动就发送消息,不保证客户端已经加入平台。如果没有有效的收件人,则该消息将消失并且不会重新发送。

于 2011-12-14T10:56:49.637 回答
0

是不是这里有问题?

new AID("server", AID.ISLOCALNAME);

如果客户端和服务器在不同的计算机上,不应该使用代理的全局唯一名称 ( AID.ISGUID) 吗?

于 2014-11-20T14:51:01.440 回答