2016-04-20 6 views
0

Ich möchte RMI-Stubs über UDP senden, nur habe ich keine Ahnung, wie Sie ein neues DatagramPacket auf dem Sender erstellen und den Stub aus dem Array von DatagramPacket.getData() auf dem Empfänger wiederhergestellt. Wie kann ich beispielsweise die Größe des Pakets zuverlässig berechnen?Senden von RMI-Stub über UDP

Kann mir bitte jemand helfen?

Danke,

Owen.

+0

Berechnen Sie die Größe des Pakets wo? Sind RMI-Stubs wirklich serialisierbar? – Kayaman

+0

Ich möchte nur einen Stub über UDP senden, also kann der Empfänger Remote-Methoden als Client zum Absender als Server aufrufen. –

+0

Das habe ich nicht gefragt. Ich habe RMI in über 10 Jahren oder so nicht verwendet, und ich bin überhaupt nicht, dass Stubs serialisierbar sind (was bedeuten würde, dass Sie sie nirgendwo senden können). Brauchen Sie Hilfe bei RMI, UDP oder beidem? Wenn beides, dann ist das zu breit. – Kayaman

Antwort

0

Sie können es wie folgt:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(stub); 
oos.close(); 
byte[] bytes = baos.toByteArray(); 
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, target, port); 
// etc ... send this datagram 

und am Empfänger, die Umkehrung dieses Prozesses, die ich als eine Übung für den Leser überlassen wird.

Aber meine erste Frage ist "warum?" Warum verwenden Sie die RMI-Registrierung nicht wie von den Designern vorgesehen? Oder RMI selbst? Sie brauchen UDP hier nicht.

NB RMI Stubs sind in der Tat serialisierbar, was die Grundlage der Registrierung ist.

+0

Tatsächlich sind sie (jetzt, wo ich meine Erinnerung ein wenig aufgefrischt habe), es ist eine Weile her, seit ich RMI machen musste, aber das ganze Szenario klang so falsch. – Kayaman

+0

@EJP Danke. Das scheint zu sein, was ich brauche. Ich werde das tun und zu dir zurückkommen. –

+0

Warum, nun, das ergibt sich aus der Frage, die Sie mir zuvor beantwortet haben: Ich möchte ein UDP - Paket von einem Gerät zu einem Cluster anderer Geräte per Multicast übertragen, damit die Empfänger untereinander entscheiden können, welcher von ihnen den Absender über den Stub geliefert. Eine Registrierung funktioniert nicht für Multicasting, oder? –