2014-02-15 3 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

예, 상담원의 로컬 이름입니다. –