2014-02-15 33 views
1

我需要在2個玉石平臺之間傳遞ACL消息。我實現了我的代碼,在同一個容器中的代理之間傳遞消息。這工作正常。但我無法開發該代碼以在遠程平臺之間傳遞消息。在玉石遠程平臺之間傳遞ACL消息

下面是我在同一個容器中爲代理實現的。在發件人代理程序代碼中,結果[]僅獲取同一平臺上的代理程序。

我錯過了什麼? 是否有任何方法可以獲取遠程平臺上的代理列表?

發件人劑

DFAgentDescription temp = new DFAgentDescription(); 
    try 
    { 
     //DFAgentDescription[] result = DFService.search(this,temp); 
     SearchConstraints sc = new SearchConstraints(); 
     DFAgentDescription[] result=DFService.search(this,temp,sc); 
     ACLMessage acl = new ACLMessage(ACLMessage.REQUEST); 

     System.out.println("Agents: "); 
     for(int i=0;i<result.length;i++) 
     { 
      if(result[i].getName().getLocalName().equalsIgnoreCase("R1")) 
      { 
       acl.addReceiver(result[i].getName()); 
       System.out.print(" , "+result[i].getName().getLocalName()); 
      } 
     } 

     acl.setContent("Hello..."); 
     this.send(acl); 
     System.out.println("Message Sent..."); 
    } 
    catch(FIPAException e) 
    { 
     System.out.println("Error !: "+e); 
    } 

接收機劑

addBehaviour(new CyclicBehaviour() 
    { 
     public void action() 
     { 
      ACLMessage msg = myAgent.receive(); 
      if(msg != null) 
      { 
       if(msg.getPerformative()== ACLMessage.REQUEST) 
       { 
        String content = msg.getContent(); 
        if ((content != null)) 
        { 
         System.out.println("Received Request from "+msg.getSender().getLocalName()); 
         System.out.println("Received Message : "+content); 
        } 
        else 
        { 
         block(); 
        } 
       } 
      } 
      else 
      { 
       block(); 
      } 
     } 
    }); 

回答

0

試試這個

AID r=new AID("[email protected]",AID.ISGUID); 
r.addAddresses("http://192.168.1.1:7778/acc"); 
acl.addReceiver(r); 
acl.setContent("Hello.!"); 
this.send(acl); 
System.out.println("\nMessage Sent to "+r); 

而不是我的本地IP使用自己的IP或主機名。

+0

它的工作!...非常感謝你。 – Dini88

+0

agent-name @ platform它是發件人還是收件人的代理人姓名? –

+0

是的,它是代理人的本地名稱。 –

相關問題