1

2 つの jade プラットフォーム間で ACL メッセージを渡す必要があります。同じコンテナ内のエージェント間でメッセージを渡すコードを実装しました。それはうまくいきます。しかし、リモート プラットフォーム間でメッセージをやり取りするコードを開発することはできませんでした。

以下は、同じコンテナー内のエージェントに実装したものです。送信者エージェント コードでは、result[] は同じプラットフォームのエージェントのみを取得します。

私は何が欠けていますか?リモート プラットフォームでエージェントのリストを取得する方法はありますか?

送信者エージェント

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();
            }
        }
    });
4

1 に答える 1

0

これを試して

AID r=new AID("agent-name@platform",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 またはホスト名を使用します。

于 2014-02-23T08:15:41.323 に答える