2015-11-20 1 views
0

Я хочу отправить файл с одним агентом другому агенту, используя JADE на том же ПК. Вот некоторая ошибка, которая возникает во время выполнения.Я хочу отправить файл от одного агента другому агенту?

*** Uncaught Exception for agent a *** 
ERROR: Agent a died without being properly terminated !!! 
java.lang.RuntimeException: Uncompilable source code - incompatible types: java.lang.String cannot be converted to byte[] 
State was 2 
ERROR: Agent b died without being properly terminated !!! 
State was 2 
    at sendmessage.A.sendMessage(A.java:36) 
    at sendmessage.A.setup(A.java:25) 
    at jade.core.Agent$ActiveLifeCycle.init(Agent.java:1490) 
    at jade.core.Agent.run(Agent.java:1436) 
    at java.lang.Thread.run(Thread.java:745) 
Nov 20, 2015 4:21:34 PM jade.core.messaging.MessagingService removeLocalAliases 
INFO: Removing all local alias entries for agent a 
Nov 20, 2015 4:21:34 PM jade.core.messaging.MessagingService removeGlobalAliases 
INFO: Removing all global alias entries for agent a 
*** Uncaught Exception for agent b *** 
java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: sendmessage.B.MyBehaviour.receive 
    at sendmessage.B$MyBehaviour.action(B.java:40) 
    at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344) 
    at jade.core.Agent$ActiveLifeCycle.execute(Agent.java:1500) 
    at jade.core.Agent.run(Agent.java:1439) 
    at java.lang.Thread.run(Thread.java:745) 
Nov 20, 2015 4:21:34 PM jade.core.messaging.MessagingService removeLocalAliases 
INFO: Removing all local alias entries for agent b 
Nov 20, 2015 4:21:34 PM jade.core.messaging.MessagingService removeGlobalAliases 
INFO: Removing all global alias entries for agent b 
Nov 20, 2015 4:21:42 PM jade.core.messaging.MessagingService removeLocalAliases 
INFO: Removing all local alias entries for agent rma 
Nov 20, 2015 4:21:42 PM jade.core.messaging.MessagingService removeGlobalAliases 
INFO: Removing all global alias entries for agent rma 

Отправитель: кто отправляет файл другому агенту с использованием JADE. упаковка sendmessage;

import jade.core.AID; 
import jade.core.Agent; 
import jade.core.behaviours.Behaviour; 
import jade.lang.acl.ACLMessage; 
import jade.lang.acl.MessageTemplate; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 

/** 
* 
* @author Administrator 
*/ 
public class A extends Agent { 

    protected void setup() { 
     sendMessage(); 
     this.addBehaviour(new MyBehaviour(this)); 
    } 

    private void sendMessage() { 
     AID r = new AID("b", AID.ISLOCALNAME); 
//  ACLMessage acl = new ACLMessage(ACLMessage.REQUEST); 
//  acl.addReceiver(r); 
//  acl.setContent("hello, my name is sender!"); 
//  this.send(acl); 
     String fileName = "a.txt";// get file name 
     byte[] fileContent = "f://a.txt";// read file content 
     ACLMessage msg = new ACLMessage(ACLMessage.INFORM); 
     msg.addReceiver(r); 
     msg.setByteSequenceContent(fileContent); 
     msg.addUserDefinedParameter("file-name", fileName); 
     send(msg); 
    } 

    private static class MyBehaviour extends Behaviour { 

     MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM); 
     private static int finish; 

     public MyBehaviour(A aThis) { 
     } 

     @Override 
     public void action() { 
      ACLMessage acl = myAgent.receive(mt); 
      if (acl != null) { 
       System.out.println(myAgent.getLocalName() + " received a reply: " + acl.getContent() + "from " + acl.getSender()); 
       finish = 1; 
      } else { 

       this.block(); 
      } 
     } 

     @Override 
     public boolean done() { 
      return finish == 1; 
     } 

    } 
} 

Получатель: кто получает файл от отправки агента через использование JADE

package sendmessage; 

import jade.core.Agent; 
import jade.core.behaviours.Behaviour; 
import jade.lang.acl.ACLMessage; 
import jade.lang.acl.MessageTemplate; 
import java.io.File; 

/** 
* 
* @author Administrator 
*/ 
public class B extends Agent { 

    protected void setup() { 
     this.addBehaviour(new MyBehaviour(this)); 
    } 

    private static class MyBehaviour extends Behaviour { 
     MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.REQUEST); 
     public MyBehaviour(B aThis) { 

     } 

     @Override 
     public void action() { 
//   ACLMessage acl = myAgent.receive(mt); 
//   if (acl!= null) { 
//    System.out.println(myAgent.getLocalName()+ " received a message: "+acl.getContent()); 
//    ACLMessage rep = acl.createReply(); 
//    rep.setPerformative(ACLMessage.INFORM); 
//    rep.setContent("ok, i received a message!"); 
//    myAgent.send(rep); 

     ACLMessage msg = receive("Yes Received your file"); 
       if (msg != null) { 
        String fileName = msg.getUserDefinedParameter("a.txt"); 
        File f = "a.txt"; // create file called fileName 
        byte[] fileContent = msg.getByteSequenceContent(); 
        // write fileContent to f 
       } 
      else { 
       this.block(); 
      } 
     } 
     @Override 
     public boolean done() { 
      return false; 
     } 
    } 
} 
+0

Вы можете напрямую отправить файл методом возвращаемого типа в качестве файла и получить этот файл в новом объекте типа файла. – Shivam

+0

Этот код не компилируется. Исправить ошибки компиляции и отладить оттуда. –

ответ

0

Это, вероятно, идея создания Онтология для вашей системы агента, если вы собираетесь обмена файлами вокруг много. JADE предлагает возможность использовать классы OntologyBean в качестве представления методов связи Агента (что действительно упрощает работу).

класс BeanOntology добавляет пользовательский язык в виде предикатов, понятий и т. Д. Внутри этих пользовательских описаний языков вы можете поместить объект и любую другую информацию, которую вы можете указать рядом с ней. На самом деле это довольно просто, если вы следуете документации, предоставленной JADE ->tutorial here

удачи!

Смежные вопросы