2011-11-08 27 views
1

我使用JADE创建代理程序系统。我创建了两个程序:一个服务器和一个客户端。无法将ACLMessage发送到远程代理程序

服务器:

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。我该如何解决这个问题?

回答

1

服务器代理在发送消息之前是否等待客户端代理的容器加入平台?您的代码显示服务器将发送消息,但不会它会这样做。

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

0

这里没问题吗?

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

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

相关问题