Я пытаюсь отправить массив байтов с сообщением Jade ACL. По сути, я хочу сделать то, что делает этот парень: плохое дополнение ошибки расшифровки, но я не Не нужно преобразовывать шифр в строку, а отправлять байты напрямую. Есть функция с именем setByteSequence, которую я мог бы/должен использовать, но когда я запускаю свой код, он выдает ошибку о том, что base64 не поддерживается, и ссылается на документацию, в которой ничего не говорится о том, как ее использовать. Только то, что он поддерживается. Я использую jade.jar с веб-сайта Jade.
Отправитель:
public class Alice extends Agent {
private static final long serialVersionUID = 725326296709140752L;
protected void setup() {
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
AID recipient1 = new AID();
recipient1.setName(String.format("Bob@%s:1099/JADE", Main.IPBob));
recipient1.addAddresses(String.format("http://%s:7778/acc", Main.IPBob));
msg.addReceiver(recipient1);
// byte[] mBytes = "bla".getBytes(); // this doesn't work
byte[] mBytes = Base64.getEncoder().encode("bla".getBytes()); // neither does this
msg.setByteSequenceContent(mBytes);
send(msg);
}
}
Получатель:
public class Bob extends Agent {
private static final long serialVersionUID = 2028682217881039710L;
protected void setup() {
addBehaviour(new CyclicBehaviour(this) {
private static final long serialVersionUID = 1L;
public void action() {
ACLMessage msg = myAgent.receive();
if (msg != null) {
System.out.println(String.format("Got Message %s", DatatypeConverter.printBase64Binary(msg.getByteSequenceContent())));
} else {
block();
}
}
});
}
}
Главный:
public class Main {
public static final String IPAlice = "...";
public static final String IPBob = "...";
public static void main(String[] args) {
int port = 1099;
int mtpPort = 7778;
String hostIP = "...";
Profile profile = new ProfileImpl(hostIP, port, null, true);
profile.setParameter(Profile.MTPS, "jade.mtp.http.MessageTransportProtocol(http://"+hostIP+":"+mtpPort+"/acc)");
Runtime runtime = Runtime.instance();
AgentContainer container = runtime.createMainContainer(profile);
try {
// AgentController bob = container.createNewAgent("Bob", agent.Bob.class.getName(), null);
// bob.start();
AgentController alice = container.createNewAgent("Alice", agent.Alice.class.getName(), null);
alice.start();
} catch (StaleProxyException e) {
e.printStackTrace();
}
}
}
}
Пример base64 тоже ничего не показывает. Он просто устанавливает объект в качестве содержимого сообщения и говорит, что он будет закодирован в base64... Может быть, я упускаю очевидное, но я этого не вижу. Я благодарен за помощь.