2011-11-08 12 views
1

私はJADEを使用してエージェントシステムを作成しています。私は2つのプログラムを作成しました:サーバーとクライアント。リモートエージェントに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)のグローバル一意の名前を使用するはずの?

関連する問題