2014-09-01 20 views
0

我正在开发和使用玉的应用程序,您可以在计算机之间进行通信。我想知道的是如何获得在接收消息时发送消息并希望在消息的“其他”中的sysout语句中显示的代理的地址。获取JADE代理地址,同时收到消息

protected void setup(){ 
     super.setup(); 

     //receiving message 
     addBehaviour(new CyclicBehaviour(this){ 
      public void action() { 
       ACLMessage msg= receive(); 

       if (msg!=null){ 
        String s = msg.getContent(); 
        String os, browser, tool, agentName, finalVal; 

        String[] elements = s.split(":"); 

        if(elements.length > 0){ 
         if(elements[0].equals("property_file")){ 
          String[] property = new String[elements.length-1]; 

          for(int i = 1; i < elements.length; i++){ 
           property[i-1] = elements[i]; 
           System.out.println(property[i-1]); 
          } 
          os = property[0]; 
          browser = property[1]; 
          tool = property[2]; 
          agentName = msg.getSender().getName(); 
          finalVal = agentName + ":" + os + ":" + browser + ":" + tool; 

          CreateText cret = new CreateText(); 
          cret.writeText(finalVal); 
         }else{ 
          System.out.println("<=" + myAgent.getLocalName() + " gets reply \"" + msg.getContent() + "\" sent by " + msg.getSender().getLocalName() + '\n'); 
          sendRep(msg); 
         } 
        } 
        block(); 
       } 
      } 
     }); 
    } 

如果地址将会像“http://[email protected]:7778/acc”,并有使用的格式是,如果我想在以后发送消息。该功能将是这样的。在这里我已经硬编码了地址的值。

public void sendMessage(String message){   
     ACLMessage msg = new ACLMessage(ACLMessage.INFORM); 
     AID r = new AID("[email protected] ", AID.ISGUID); 
     //r.addAddresses("http://[email protected]:7778/acc"); 

     msg.setContent(message); 
     msg.addReceiver(r); 
     send(msg);    
    } 

回答

1

终于找到了答案。

ACLMessage msg= receive(); 
String[] addressArr = msg.getSender().getAddressesArray(); 
System.out.println(addressArr[0]); 

数组的第一元素将是我们从

接收消息代理的地址的值