2011-11-08 33 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)的全球唯一的名稱?

相關問題